跨站请求伪造

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攻击。

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

如何解决跨站点请求伪造

跨站请求伪造

跨站请求伪造

跨站请求伪造

跨站请求伪造

跨站请求伪造攻击的基本原理与防范