CSRF介绍
什么是CSRF呢?我们直接看例子。
https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260
这个URL是头条删除pgc_id为6829574701128352260的一篇文章的连接,通过执行这个URL用户就可以删除这篇文章。
首先攻击者会构造一个页面:
https://mp.toutiao.com/CSRF.html
其内容为:
<img src="https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260" />
使用了一个<img>标签,地址指向了删除头条文章的链接。
攻击者会诱使头条主去访问这个页面:
执行CSRF攻击
该用户看到了“头条君找不到你想要的页面”的错误提示,回头再看看头条内容管理:
文章被删除了~~
发现原来存在的“十大常见web漏洞——跨站点请求伪造(CSRF)”文章已经被删除了!呵呵~~
这是因为头条主在访问“https://mp.toutiao.com/CSRF.html”时,执行了CSRF.html页面中的命令,删除了文章。
CSRF的防御
验证机制
当头条主在访问“https://mp.toutiao.com/CSRF.html”时增加验证确认机制:
删除确认
Referer Check
我们在之前的文章中讲过HTTP请求头部的一些可修改的值,就包括Referer值:
HTTP请求头部
就是确认这个值与Host值是否一致。
操作参数加密
攻击者为什么会构造这个链接:https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260,因为他知道参数“do=delete&pgc_id=6829574701128352260”是删除操作,如果将这个参数加密,攻击者就不知道具体操作是什么了,也就无法攻击了。
没有网络安全,就没有国家安全!