Asp.net身份验证检查

时间:2012-08-13 21:39:40

标签: asp.net security

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

例如,第X页只能由标有“管理员”的人查看。

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

我可以继续讨论所需的数百个地点和类型的身份验证检查,但基本上我知道这样做的唯一方法是在每个按钮点击处理程序page_load的开头运行大量自定义代码, GridView rowChange等将首先检查一些业务逻辑然后允许它或返回。

更一般地说,甚至有必要对每个回发进行这些业务逻辑身份验证检查吗?

1 个答案:

答案 0 :(得分:1)

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

如果检查仅部分基于角色且具体,例如秘书可以点击这个,管理员可以查看这个,Joe可以在周末查看这个等等。然后你需要在你的代码后面进行授权检查。您必须重新执行授权检查,除非您可以将结果缓存到安全的地方。如果ViewState已加密,您可以在ViewState中缓存结果。

如果你没有检查回发授权,你很容易受到自定义制作的帖子的攻击,这些帖子会在禁用按钮,隐形按钮等上调用事件。通过加密viewstate并保持事件验证,你可以减轻这种事情。

将您的代码分解为实用程序类和基类,以最大限度地减少重复。