CSRF跨站请求伪造

Posted heimaguangzhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSRF跨站请求伪造相关的知识,希望对你有一定的参考价值。

CSRF
CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造是一种对网站的恶意利用
CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......
造成的问题:个人隐私泄露以及财产安全。


CSRF攻击示意图
<ignore_js_op>技术图片

防范措施
     方法一
       对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证。大致步骤如下:
       1. 在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值
       2. 在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token
       3. 在用户点击提交的时候,会带上这两个值向后台发起请求
       4. 后端接受到请求,会做以下几件事件:
                (1) 从 cookie中取出 csrf_token
                (2) 从 表单数据中取出来隐藏的 csrf_token 的值
                (3) 进行对比
       5. 如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作


       方法二
       另一个可选的方法是“双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。如果某个授权的cookie在form post之前正被javascript代码读取,那么限制跨域规则将被应用。如果服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域,因为其它域是不能从信任域读取cookie的。与通常的信任想法相反,使用Post代替Get方法并不能提供卓有成效的保护。因为JavaScript能使用伪造的POST请求。尽管如此,那些导致对安全产生“副作用”的请求应该总使用Post方式发送。Post方式不会在web服务器和代理服务器日志中留下数据尾巴,然而Get方式却会留下数据尾巴。

以上是关于CSRF跨站请求伪造的主要内容,如果未能解决你的问题,请参考以下文章

CSRF跨站请求伪造

Django--CSRF 跨站请求伪造

CSRF跨站请求伪造

跨站请求伪造CSRF原理

对CSRF(跨站请求伪造)的理解

21)django-csrf(跨站请求伪造)