跨站请求伪造
Posted two-peanuts
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨站请求伪造相关的知识,希望对你有一定的参考价值。
一,什么是跨站请求伪造
通过技术手段欺骗用户访问一个已经登录/认证过的网站,并利用网站对用户的信任做操作(包含非网站认证者意愿操作)。
他不是通过CSRF攻击直接去的账户及密码,而是欺骗用户浏览器,让其以用户的名义运行操作
例子:
假如一家银行用以运行转账操作的URL地址如下: http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一个恶意攻击者可以在另一个网站上放置如下代码: <img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。
二,防御措施
1,少用GET
如上例子的GET方式极其容易被捕获网站信息及规律。
2,添加校验token
用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。
这种数据通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。
如:
import os CSRF_ENABLED = True SECRET_KET = os.urandom(24)
当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。
这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。
3,加验证码
强制用户必须与应用进行交互,才能完成最终请求。在通常情况下,验证码能很好遏制CSRF攻击。
以上是关于跨站请求伪造的主要内容,如果未能解决你的问题,请参考以下文章