前言
上一篇文章总结了cookie相关的东西,然后自然而然的引出CSRF攻击这种东西。
原理
CSRF攻击的原理在于cookie的携带规则,你在向特定服务器发送请求时,会自动带上对应的cookie。举个栗子
- 用户在aaa.com登录,后端写下了token=*** 的cookie在aaa.com下
- 用户打开钓鱼网站bbb.com
- bbb.com里有一个图片(或者其他链接)发送一个请求到aaa.com
- 此时这个链接里就会带有token=*** 这个cookie
- 这时如果aaa.com没有做任何验证,那么这个就会误以为是用户发送的请求从而导致安全问题。
这里有一个稍微有点难以理解的点在于,cookie是跨域的 那你从bbb.com应该无法访问aaa.com的cookie才对啊。没错,但是CSRF攻击其实并不需要访问到这个cookie,只需要发送请求的时候自动携带上就行,bbb.com从头到尾都不知道也不需要知道aaa.com里的cookie具体是什么内容。
防止
防止CSRF攻击并不困难,自然而然的可以想到这些方法。
直接不存在cookie里
这种方法可以说是从根本上解决问题,我不存在cookie里不就没事了?是的,但是可能又会导致其他的例如XSS攻击,但这确实也是一种解决方案。
利用 Origin Header/Referer Header进行同源检测
这种方法我觉得这篇文章说的很好了,就没什么必要再说了。 前端安全系列之二:如何防止CSRF攻击?
概况一下就是这种方法不够好用。
SameSite
设置SameSite来保证无法跨域携带cookie。之前的文章里有具体写,但是现在chrome浏览器默认所有的请求的SameSite都是lax,如果想设置成none就要开启secure,也就是开启https。
token
token应该是我知道最常用的方法了,所谓的token其实就是个令牌用来识别是否是用户本人。例如
http://url?csrftoken=tokenvalue,或者直接放进请求头里。
...
好像确实没什么内容...