Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET4.0(不是MVC)中,有没有框架内的方法来防止跨站点请求伪造(CSRF)?_Asp.net_Security_Csrf - Fatal编程技术网

在ASP.NET4.0(不是MVC)中,有没有框架内的方法来防止跨站点请求伪造(CSRF)?

在ASP.NET4.0(不是MVC)中,有没有框架内的方法来防止跨站点请求伪造(CSRF)?,asp.net,security,csrf,Asp.net,Security,Csrf,在基于ASP.NET4.0Web表单的网站(非MVC)中,是否有任何框架内的方法来防止跨站点请求伪造(CSRF)?我确实看到该框架生成了uu EVENTVALIDATION和u VIEWSTATE隐藏表单字段,我已经在我的web.config中通过machineKey和viewStateEncryptionMode=“Always”对它们进行了加密。然而,目前还不清楚他们是否真的能阻止CSRF攻击。我测试了一个交叉发布(通过表单的asp:Button中的PostBackUrl)表单,在该表单中,

在基于ASP.NET4.0Web表单的网站(非MVC)中,是否有任何框架内的方法来防止跨站点请求伪造(CSRF)?我确实看到该框架生成了uu EVENTVALIDATION和u VIEWSTATE隐藏表单字段,我已经在我的web.config中通过machineKey和viewStateEncryptionMode=“Always”对它们进行了加密。然而,目前还不清楚他们是否真的能阻止CSRF攻击。我测试了一个交叉发布(通过表单的asp:Button中的PostBackUrl)表单,在该表单中,我修改了_VIEWSTATE、_EVENTVALIDATION和_PREVIOUSPAGE(交叉发布的额外内容)隐藏、加密的表单字段,其他敏感表单字段仍然到达我的代码隐藏处理块。我期望框架检测修改后的加密字段并抛出一个错误。仅供参考,我将aspx保存为.html,更改了那些隐藏的表单字段,并重新使用表单(现在为.html)来模拟攻击者。所以我仍然可以发布到我的敏感表单/字段,因为(开始推测)。html文件不通过ASP.NET处理引擎?(/结束推测)

如果不存在这样的框架内机制,是否有用于快速原型设计/使用的代码片段?我可以通过散列用户ID轻松创建每个用户的唯一标识符,甚至可以为该c#变量设置一个表单隐藏变量。但是ASP.NET4.0的机制

  • 还将该c#变量设置为cookie

  • 检查cookie值是否=后续请求的表单值(有效性)

对我来说不清楚。

我不知道如何在框架中完成它,但你可以自己做,比你的帖子建议的要容易

您不需要设置cookie值。这正是mvc框架作为优化的方式,它允许服务器处于无状态。您只需选择一些随机值(对攻击者而言)并将其作为隐藏字段添加到表单中。返回数据时,请验证该值是否在表单中。不要只是散列userid,散列userid和一些秘密的随机值。这样,如果攻击者知道用户id,就无法计算隐藏值


由于同源策略阻止攻击者.com读取站点的标记,因此他们无法读取隐藏值。因此,他们制作的CSRF帖子,在拥有cookie(以及视图状态)时,不会有那个值。

明白了。用户ID之外的salt、nonce或其他内容,用于生成进入隐藏表单字段的哈希/签名。谢谢