从cookie开始的登录知识--CSRF

122 阅读2分钟

前言

上一篇文章总结了cookie相关的东西,然后自然而然的引出CSRF攻击这种东西。

原理

CSRF攻击的原理在于cookie的携带规则,你在向特定服务器发送请求时,会自动带上对应的cookie。举个栗子

  1. 用户在aaa.com登录,后端写下了token=*** 的cookie在aaa.com下
  2. 用户打开钓鱼网站bbb.com
  3. bbb.com里有一个图片(或者其他链接)发送一个请求到aaa.com
  4. 此时这个链接里就会带有token=*** 这个cookie
  5. 这时如果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,或者直接放进请求头里。

...

好像确实没什么内容...