如果我从ChildActionOnly操作方法中删除任何自定义授权属性,它是否安全?

时间:2015-03-06 11:54:26

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

我正在开发一个asp.net MVC 5 Web应用程序。我已经为我的应用程序定义了一个自定义授权属性,如下所示: -

[CheckUserPermissions(Action = "Approve", Model = "Customer")]

定义用户应具有客户控制器的“批准”权限。

现在我有多个动作方法只能使用Html.Action调用,其中每个动作方法返回一个局部视图,我希望这些动作方法始终具有与其父动作方法相同的权限。

因此,如果我从这些子操作方法中删除自定义授权属性并定义[ChildActionOnly]属性,那么它是安全的,所以在这种情况下,我可以确保这些操作方法将始终作为子操作方法调用父动作方法将具有所需的权限?因此,在某些情况下,可能会使用读取权限调用ChildActionOnly操作,而在其他情况下,可以使用“编辑”权限等调用它?

1 个答案:

答案 0 :(得分:1)

我使用这种模式,我相信它是安全的。

无法直接调用[ChildActionOnly]操作,因此它们始终受其父操作“[Authorize]属性的保护。他们不需要自己的,除非你想对孩子施加比父母行动更严格或不同的安全保障。

我能看到的唯一风险是,您忘记了子操作不安全,并从不安全的父操作中调用它,或者您忘记使用[ChildActionOnly]注释未安全的子项。在安全方面,“带和括号”方法有时会很好 - 将[Authorize][ChildActionOnly]放在子操作上可以保护您免受程序员错误的影响。