学编程,来源栈;先学习,再交钱
当前系列: 垃圾桶 修改讲义

漏洞

因为:HTTP无状态(复习

所以,无论从哪个页面访问目标网站(比如:http://17bang.ren/),浏览器都会自动将其存放的该网站cookie发送过去;

而这cookie当中,存储了用户身份验证信息……

演示:百度搜素“一起帮”,点击我们网站连接,自动登录

@想一想@:于是你能干什么坏事?^_^


跨域请求欺骗

Cross-Site Request Forgery:CSRF,或者XSRF:

  1. 攻击方(黑客)可以做一个“陷阱网站”,里面放上诸如:妹妹好寂寞,阿泰快来之类的链接,诱使其他用户点击。这个链接可以通过url参数或JavaScript代码给目标网站指令,比如点赞/转账/发布评论等等
  2. 如果该用户之前曾经访问/登录过目标网站,且该网站使用cookie存放用户授权信息,浏览器就会把自动的cookie也传递到被攻击网站
  3. 被攻击网站无法辨别用户是:真正的想进行链接指示的操作,还是受欺骗后由陷阱网站生成的指令

演示:17bang.ren上点赞sample.17bang.ren

让服务器确保该HTTP请求确实由“我”生成的HTML页面/链接……所产生


Request.Referer

早期有开发人员使用Request.Referer检查本次Http请求的上一次请求地址,来确定本次请求是否来源于当前网站:

Request.Refere不是当前网站的一律拒绝。

但是,很遗憾,Request.Referer一样可以伪造。


AntiForgeryToken

防御的核心在于除了用户的验证cookie以外,还要生成一个token,以确保链接/表单确实为服务器端生成。

MVC从3.0版本开始,为我们提供了内置的:

    @Html.AntiForgeryToken()

将其添加在form表单中,就会额外生成一个hiden input,记录了一个token:

<input name="__RequestVerificationToken" type="hidden" value="assObJoyzRa1d-...-gU4rw1">

同时会向前台发送一个cookie:

最后,还需要在在Action上标注:

[ValidateAntiForgeryToken]

这样,MVC就会在开始Action之前,验证 hiden input 和 cookie,检验form表单是否为MVC自己生成的。

具体算法未知,但根据文档,大致来说:

  • hide input 是根据页面生成序列生成的,所以每一次页面刷新都会变化
  • cookie是根据用户信息生成的,所以同一个用户cookie值不会变化

演示:上述知识,以及修改/没有hide input,异常提示


通常来说,我们都是form表单提交时使用CSFR验证(因为这些信息比较敏感)。如果要在GET请求的url参数中添加token,需要使用JavaScript的技术……


---------------------------------

RazorPage

---------------------------------


默认自动启用


演示:略


作业

想一想一起帮哪些页面需要添加防御CSFR,并为其添加防御机制


学习笔记
源栈学历
键盘敲烂,月薪过万作业不做,等于没学

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 垃圾桶 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码