我需要在所有页面上使用`[ValidateAntiForgeryToken]和@ Html.AntiForgeryToken()`吗?

yus*_*suf 12 asp.net-mvc simplemembership

我的所有项目的页面都需要身份验证..通常我不会[ValidateAntiForgeryToken] and @Html.AntiForgeryToken()在我的控制器和视图上使用..只有登录页面有它..

  1. 他们是什么[ValidateAntiForgeryToken] and @Html.AntiForgeryToken()
  2. 我需要使用它们吗?
  3. 我必须使用哪种cookieless?

我的web.config就像这样;

<authorization>
  <deny users="?" />
</authorization>
<authentication mode="Forms">
  <forms loginUrl="~/User/Login" timeout="30" cookieless="UseDeviceProfile" name="AbosSMSP" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

我的错误是这样的; 我的错误是这样的

Sli*_*sim 21

可以认为antiforgerytoken是一种确保即将发布的操作请求实际上来自您输出视图的请求的方法.它会阻止跨站点脚本攻击,我认为它也会处理重放后的攻击.

将前门固定到您的应用程序是一个良好的开端,它可以阻止人们通过蛮力窃取他们的数据,但是,它不会阻止所有形式的攻击.社交工程和网络钓鱼之类的东西可以让某人进入您的网站而不会破坏登录页面.

一旦进入,它们可以达到各种各样的肮脏,所以请查看OSWAP建议,看看是否还有其他可能容易受到攻击的攻击. http://www.ergon.ch/fileadmin/doc/Airlock_Factsheet_OWASP_en.pdf

如果有疑问,你可以让你的网站笔经过道德黑客测试几百次,如果你正在寻找敏感数据,那么我会建议,因为他们会提取你甚至可能没有想到的东西.

我最重要的安全提示

  1. 登录页面上的Antiforgerytoken
  2. 将所有身份验证尝试减慢至少一秒(使蛮力不切实际)
  3. 对n个无效登录实施帐户锁定程序
  4. 始终在失败的登录中使用通用错误消息,以防止黑客知道登录的哪个部分是错误的
  5. 始终使用salt加密数据库中的密码,盐应该是每个用户,以防止对被盗数据库的彩虹攻击
  6. 始终确保显示或检索的任何数据对该用户有效
  7. 始终使用参数化的sql
  8. 尝试并混淆您的网址和视图中传递的ID,以防止修改或尝试直接引用攻击

在此之后,我认为您将涵盖笔测试所提出的大部分内容,并为您提供安全网站的良好信誉

  • PS虽然MVC在帮助开发人员正确逃避方面远胜于WebForms,但开发人员的意识仍然至关重要.例如,开发人员可以使用@ [Encoder/Ajax] .JavaScriptEncode包装不受信任的JavaScript文本.见http://weblogs.asp.net/jgalloway/archive/2011/04/28/preventing-javascript-encoding-xss-attacks-in-asp-net-mvc.aspx.更一般地,请参阅"保护ASP.NET MVC应用程序"下的链接,网址为http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx. (3认同)
  • 它不属于OP的主题,但是这个优秀的列表省略了防止漏洞利用的基础,包括XSS(以及XSRF):为输出的执行上下文转义所有不受信任的数据.该PDF的原始来源有许多额外的智慧:https://www.owasp.org/index.php/Top_10_2013-Top_10.在转义时,请参阅"我是否易受'跨站点脚本(XSS)'?" 和"我如何防止'跨站点脚本(XSS)'?" 在https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS). (2认同)