28,cookie和token,为什么不会劫持token
2019-11-26 本文已影响0人
r8HZGEmq
前置基础:
1,浏览器会自动带上cookie,但是不会自动带上token。
2,cookie其实是服务的产生的sessionId。
3,token需要开发者手动塞进请求头中。
4,跨站请求伪造:CSRF(Cross-site request forgery)
cookie保证了用户可以处于登录态,但是B网站拿不到cookie
所以如何防CSRF攻击:
1,服务端产生一个token,发送给客户端。
2,客户端由开发者主动塞进head中(或作为param也没问题),而不是浏览器自动带上。
3,服务端拿到token参数后做校验。不合法的token请求被拒绝。
还有一种办法,通过head里的referer:
1,举例:百度的服务器上有一张图片。www.baidu.com/path/picture.jpg
2,在我自己的网站www.custom.com/path/home.html中,引用了这个图片的url。
3,百度服务器在收到图片请求头中根据Referer,能知道是张三的网页,还是李四的网页在请求
4,可以用来做引流统计。还可以用来做防盗链。如果请求是来自李四的,就拒绝。
接着说“跨域脚本攻击”:XSS(Cross Site Scripting)
1,不需要任何的登录认证
2,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本。
比如搜索输入框中。输入“<script>alert(1)</script>”。
如何防范呢:
1,URL的编码处理。比如字符“var a = 5”,编码后就是纯文本,不编码就会被浏览器解析成一个变量赋值
2,移除用户输入的Style节点、Script节点、Iframe节点等过滤。(白名单)
最后要回答本篇贴的问题了。为什么CSRF只劫持cookie,不劫持token
因为,跨域请求伪造,要的就是cookie,来伪装B网站的身份,让服务器以为是A。
举例:
cookie:用户点击了链接,cookie未失效,导致发起请求后后端以为是用户正常操作,于是进行扣款操作。
token:用户点击链接,由于浏览器不会自动带上token,所以即使发了请求,后端的token验证不会通过,所以不会进行扣款操作。
但是对于XSS攻击来说,这2种方式的防反,都没什么用。因为攻击者不通过cookie和token来攻击。而是通过注入脚本