码迷,mamicode.com
首页 > 其他好文 > 详细

跨站请求伪造

时间:2019-07-19 15:20:45      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:操作   浏览器   登录   external   无法   alice   就会   ofo   img   

一,什么是跨站请求伪造

  通过技术手段欺骗用户访问一个已经登录/认证过的网站,并利用网站对用户的信任做操作(包含非网站认证者意愿操作)。

  他不是通过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攻击。

跨站请求伪造

标签:操作   浏览器   登录   external   无法   alice   就会   ofo   img   

原文地址:https://www.cnblogs.com/two-peanuts/p/11213349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!