所以,Token的作用之一

之前就是只知道在登录的时候获取token然后传给后台进行验证,但是从没有真正了解过token的作用,直到读了美团的前端安全系列,才有了更深的了解。

在了解Token的作用之前,我们需要知道什么是CSRF漏洞,以及它的发生与类型

CSRF:

跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

攻击流程:

攻击类型:

1. GET类型—GET类型的CSRF利用非常简单,只需要一个HTTP请求,一般如下

<img src="http://bank.example/withdraw?amount=10000&for=hacker" >

(受害者访问含有这个img的页面后,浏览器会自动向这个地址发出一次HTTP请求。bank.example就会收到包含受害者登录信息的一次跨域请求)

 2. POST类型—一般是使用一个自动提交的表单

<form action="http://bank.example/withdraw" method=POST>

    <input type="hidden" name="account" value="xiaoming" />

    <input type="hidden" name="amount" value="10000" />

    <input type="hidden" name="for" value="hacker" />

</form>

<script> document.forms[0].submit(); </script>

(访问该页面,表单就会自动提交,相当于模拟用户完成了一次POST操作。任何个人网站,博客,被黑客上传页面的网站都有可能是发起攻击的来源,后端接口不能将安全寄托在仅允许POST上)

3. 链接类型—不常见,因为这种需要用户点击才会触发。

<a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">

  重磅消息!!

<a/>

(由于用户登录了信任的网站A,并且保存登录状态,只要用户主动访问上面的PHP页面,攻击就成功)

CSRF特点:

  • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。
  • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
  • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪

通过上述介绍,我们应该已经能大改的了解的CSRF了,下面就是Cookie登场

Cookie就是防止CSRF漏洞的一个措施之一。

CSRF的另一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。

原理 : (请求拦截很好的选择

1、将CSRF Token输出到页面中

用户打开页面的时候,服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。因此,为了安全起见Token最好还是存在服务器的Session中,之后在每次页面加载时,使用JS遍历整个DOM树,对于DOM中所有的a和form标签后加入Token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用,还需要程序员在编码时手动添加Token   

2、页面提交的请求携带这个Token

对于GET请求,Token将附在请求地址之后,这样URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上:

<input type="hidden" name="csrftoken" value="tokenvalue"/>

这样,就把Token以参数的形式加入请求了。

3、服务器验证Token是否正确 (后台的操作)

总结:Token是一个比较有效的CSRF防护方法,只要页面没有XSS漏洞泄露Token,那么接口的CSRF攻击就无法成功

更具体的请参考:https://segmentfault.com/a/1190000016659945

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值