CSRF跨站请求伪造(防止黑客攻击)

CSRF跨站请求伪造(防止黑客攻击)_第1张图片
CSRF跨站请求伪造(防止黑客攻击)_第2张图片
案例演示
正常逻辑CSRF跨站请求伪造(防止黑客攻击)_第3张图片
访问:
CSRF跨站请求伪造(防止黑客攻击)_第4张图片
用户名和密码是写死的: 如果输入成功就重定向到转账界面CSRF跨站请求伪造(防止黑客攻击)_第5张图片
来输入用户名和密码:CSRF跨站请求伪造(防止黑客攻击)_第6张图片
跳转到转账界面了, 接下来我们输入账号和金额:CSRF跨站请求伪造(防止黑客攻击)_第7张图片
点击转账会做什么呢?我们先来看一下:CSRF跨站请求伪造(防止黑客攻击)_第8张图片
哦, 原来是执行转账(假装),然后打印一下结果:在这里插入图片描述
伪造逻辑(csrf发生过程):

现在来一个黑客,要利用csrf来攻击你的转账界面:
那他就先来了解了一下你的转账界面:CSRF跨站请求伪造(防止黑客攻击)_第9张图片
知道了你转账的请求的url,就是当前界面
转账所带的参数有to_account和money.
接下来他写了如下攻击程序:
demo代码如下:CSRF跨站请求伪造(防止黑客攻击)_第10张图片

模板代码如下: (核心就是这里. 这里也有一个表单,里边请求的action,是转账的网址,参数,请求方式,啥的都一样. 但是to_account就是黑客自己写的了,金钱也是黑客自己写的(意思就是黑客想给谁,转多少钱都可以了.))CSRF跨站请求伪造(防止黑客攻击)_第11张图片

运行攻击网站:CSRF跨站请求伪造(防止黑客攻击)_第12张图片
访问:
CSRF跨站请求伪造(防止黑客攻击)_第13张图片
点击领取优惠劵按钮:CSRF跨站请求伪造(防止黑客攻击)_第14张图片
发现竟然转账成功了(因为我们转账的网站,已经在当前浏览器登录,已经有cookie了)
如下:
CSRF跨站请求伪造(防止黑客攻击)_第15张图片
这个红框的校验是可以通过的, 所以就转账成功了.
解决CSRF攻击

CSRF跨站请求伪造(防止黑客攻击)_第16张图片
具体操作
给A网站的转账界面添加如下hidden隐藏域:CSRF跨站请求伪造(防止黑客攻击)_第17张图片
这个csrf_token是由视图函数传递过来的一个随机字符串:CSRF跨站请求伪造(防止黑客攻击)_第18张图片
访问:
CSRF跨站请求伪造(防止黑客攻击)_第19张图片
查看源代码:CSRF跨站请求伪造(防止黑客攻击)_第20张图片
多次刷新,这个csrf_token是变化的.
接下来做校验逻辑:CSRF跨站请求伪造(防止黑客攻击)_第21张图片
我们在生成csrf_token的时候将他保持到cookie中. 然后在点击转账的时候,进行取出然后校验.
代码写完之后,清除cookie重新来转账:
首先登陆:
CSRF跨站请求伪造(防止黑客攻击)_第22张图片
然后转账:CSRF跨站请求伪造(防止黑客攻击)_第23张图片
此时有一个cookie, 与表单中的隐藏域是一样的:CSRF跨站请求伪造(防止黑客攻击)_第24张图片
点击转账:CSRF跨站请求伪造(防止黑客攻击)_第25张图片
隐藏域和cookie都会提交到后台视图, 所以校验通过:在这里插入图片描述
来看一下攻击网站:
CSRF跨站请求伪造(防止黑客攻击)_第26张图片
点领取:
在这里插入图片描述
非法请求. 为啥?CSRF跨站请求伪造(防止黑客攻击)_第27张图片
因为他这里是没有隐藏域的. 虽然提交的是网站A的url, 浏览器会携带网站A的cookie过去. 但是B是没有办法拿到A的隐藏域的内容进行仿造的.
所以缺少隐藏域,验证失败.

你可能感兴趣的:(CSRF)