Asp.net mvc 使用MVC防止Url操纵攻击?
有没有防止URL操纵的好策略、代码片段等 例如,我有一个url,Asp.net mvc 使用MVC防止Url操纵攻击?,asp.net-mvc,security,url,Asp.net Mvc,Security,Url,有没有防止URL操纵的好策略、代码片段等 例如,我有一个url,http://localhost/profile/edit/5id可以很容易地更改为任何内容,因此人们可以编辑不需要的个人资料 以下是我想到的一些想法,但它们都有缺点: 将我的系统更改为使用GUID主键-这几乎不可能猜出键-但人们仍然可以从应用程序的一个部分获取GUID,稍后在另一个url中使用它 使用TempData存储密钥-防止到处发送URL\used 稍后 在显示页面之前在控制器中执行检查-表示您 到处都要做“管理员”代码 检
http://localhost/profile/edit/5
id可以很容易地更改为任何内容,因此人们可以编辑不需要的个人资料
以下是我想到的一些想法,但它们都有缺点:
最好的办法是什么?其中一个或其他什么?第三个是正确的做法。服务器端安全验证始终是您需要的,因为这是您完全可以控制和依赖的机制 第一是隐蔽性的安全性,如果有人不小心在某处发布了他的URL(就像人们在复制/粘贴链接时经常使用会话ID一样),您的“安全性”就被破坏了
第2个似乎是一个薄弱的安全性-如果你经历了麻烦,最好实现适当的安全性。这也允许人们对页面进行书签。 用于访问站点的URL是来自客户端的数据,当涉及安全性时,应始终考虑客户端提供的数据敌对。
不幸的是,没有解决这个问题的灵丹妙药。您需要在整个应用程序中实施访问限制。您不应该让URL“防操作”以保护底层功能。此外:大多数网站使URL更具可读性,如
http://stackoverflow.com/questions/741653/preventing-url-manipulation-attacks-with-mvc
例如,模糊处理将是一种倒退
而是检查控制器内的权限,如果不允许用户编辑配置文件6,则引发异常。如果您不想让“检查”无处不在,那么您可以将它们放入ActionFilter
,或者创建一些助手方法,比如CurrentUser.FindProfileToEditById(profileId)
(如果不允许该操作,则会引发异常),而不是Profile.FindById(id)
如果您想要一个没有“当前用户”的通用服务,您可以使用GUID(例如Doodle),但是这在各种方面都是一个安全威胁(Facebook的相册有这个问题)。我使用自定义授权过滤器来实现基于角色和所有者的访问控制。标准AuthorizationFilter将允许您指定可以访问操作的命名角色或用户。我对其进行了扩展,允许您指定如果当前用户是数据的“所有者”,则他们可能具有访问权限。我有两个额外的过滤器,RoleRowGeneratedAuthorizationFilter和RoleRowGeneratedAssociatedAuthorizationFilter。第一个检查RoutedData中传递的可配置参数(通常为
id
)是否为my users表中当前用户的id,或者当前用户是否处于所列角色中。如果检查成功,则返回授权错误视图
第二种方法允许我指定联接表和参数,用于将RouteData中的参数与联接表中的列以及当前用户与联接表中的另一列关联。如果有一个条目同时匹配参数值和用户,那么我认为用户与数据相关,可以访问。如果您处于指定角色,它还允许访问。在这三个不同的属性之间,我几乎满足了我所有的访问控制需求,这意味着我只需使用一个适当配置的属性进行装饰即可应用安全性。同意。MVC默认带有帐户创建页面,您也可以使用它们!通过实现允许您将安全性作为一个方面应用于不同控制器/操作的属性,您可以使(3)变得更容易。查看我对这个问题的回答,了解更多关于我是如何做到这一点的信息。我想补充一点,现在还没有合适的方法来做到这一点吗?也许在实体框架中?