1

我有一个 asp.net 网络表单项目。在需要保护的所有区域的整个应用程序中添加业务逻辑身份验证检查的标准方法是什么?

例如,页面 X 只能由标记为“管理员”的人查看。

一个更复杂的例子:只有属于管理用户 A、B 和 C 的一组人的用户才能修改用户 A、B 或 C 的个人资料信息。

我可以继续大约需要数百个位置和类型的身份验证检查,但基本上我知道的唯一方法是在每个按钮单击处理程序、page_load、GridView rowChange、等将首先检查一些业务逻辑,然后允许它或返回。

更一般地说,是否有必要对基本上每个回发进行这些业务逻辑身份验证检查?

4

1 回答 1

1

如果检查是基于角色的并且是粗略的,例如“管理员”角色可以执行此页面上的所有代码,但没有其他人可以 - 然后使用缓存在您的 FormsAuthentication cookie 中的角色和 PrinciplePermission 属性,例如http://msdn.microsoft .com/en-us/library/ms731200.aspx 您也可以将这些属性放在方法上。但是,它们不允许进行复杂的授权检查,并且在不重新编译代码的情况下不容易更改。

如果检查只是部分基于角色和细粒度的,例如秘书可以点击这个,管理员可以查看这个,Joe 可以在周末查看这个等等。那么你需要在你的代码中进行授权检查。除非您可以将结果缓存在安全的地方,否则您必须重新执行授权检查。如果 ViewState 已加密,您可以将结果缓存在 ViewState 中。

如果您在回发时不检查授权,那么您很容易受到自定义制作的帖子的攻击,这些帖子会在禁用按钮、不可见按钮等上调用事件。通过加密视图状态并保持事件验证,您也可以减轻这种事情的影响。

将您的代码分解为实用程序类和基类,以尽量减少重复。

于 2012-08-13T21:50:01.103 回答