zoukankan      html  css  js  c++  java
  • ASP.NET MVC AntiForgeryToken

    你开发一个网站,其中有个功能:新闻发布。

    你是这样实现的:

    1.保存新闻的方法是:/News/Save  POST提交

    2.接受两个参数:title和content

    有一天,你登录网站(浏览器会保存相关cookie),发布了一条新闻,发布成功。

    然后打开了NSFW网站(你站点的相关cookie还在),这个网站等你很久了,他知道你的新闻发布功能的实现,于是在页面中嵌入一段脚本,模拟参数,请求你的保存方法。当然,还带着你的站点的cookie。

    你的程序代码当然的处理成功了,所以一条新闻就发布成功了。而整个过程,你还懵逼着。

    这个就是CSRF。Cross-site request forgery的缩写,中文名称叫跨站请求伪造。

    名词很高大上,写在PPT里忽悠几句还能拿个风投。但简单理解就是:攻击者盗用了你的身份,以你的名义发送恶意请求。

    重点在“伪造”,如果你能保证你访问每一个网站,都清除上个网站的痕迹的话,你就可以避免此攻击。但是,可能吗?NO!

    所以,要在程序层面进行防御,重点是让攻击者无法伪造

    ASP.NET MVC的做法是:Html.AntiForgeryToken()

    会在页面上生成这样一个隐藏域:

    提交到服务端,使用ValidateAntiForgeryToken特性验证:

    如果服务端请求中没有__RequestVerificationToken参数:

    或者参数的值不一致:

    这样,就能很大程度上防止伪造,进行CSRF攻击了。

  • 相关阅读:
    .NET简谈插件系统开发模式
    .NET实现之(自动更新)
    .NET简谈互操作(二:先睹为快)
    .NET实现之(WebBrowser数据采集—基础篇)
    .NET简谈设计模式之(观察者模式)
    .NET简谈平台大局观
    .NET实现之(简易ORM)
    .NET简谈面向接口编程
    .NET简谈事件与委托
    .NET实现之(WebBrowser数据采集—终结篇)
  • 原文地址:https://www.cnblogs.com/talentzemin/p/7199815.html
Copyright © 2011-2022 走看看