理解 CSRF——它站请求

# 例子
你入学,学校给你一张饭卡,能刷饭。去别的学校游玩,一进门,卡就被恶意隐藏在旁边的刷卡机刷爆了。

# 原因
浏览器(tabs/ 2个刷卡机)向正确网址发送POST请求时,会把cookie里的凭证一同发过去。即使这个请求在别的学校、黑客的网站发起的,照样发送。
# 解决办法
设密码。
csrf_token相当于一次一密。只有服务器和合法的页面知道。它站想请求刷卡?没门。
这肯定不能让用户输入密码的啦。饭卡(cookie)本来就是用来方便学生登记后不用每次验密的。
隐藏的密码从服务器传到合法的刷卡机上,然后回传。

# 实际预防方案
1. 数据库改动的操作用POST,并且
2. POST设csrf_token.

# Django内部实现
[How it works](https://docs.djangoproject.com/en/dev/ref/csrf/#how-it-works) 
cookie >>> csrf_token1 >>> secret1 
页面form >>> csrf_token2 >>> secret2 
secret1 != secret2: 认证失败 
secret1每次登录都会重新分配 
黑客无法获取到用户的cookie,但是浏览器会发送正确的cookie到我们的服务器 
黑客在钓鱼页面无法获取正确的csrf_token2,服务器端强制same origin 
黑客伪造origin from使得来源网址相同, 得到的csrf_token2‘,secret2’  != secret1(因为黑客不知道用户的密码,就获取不到用户的secret1。),照样认证失败 

评论

此博客中的热门博文

Windows下ShadowSocks客户端安装和配置 顺带KCP

How to Install KeePass on M1 Mac

How User Friendly is a MacOS