freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

token如何防御csrf
2021-04-27 01:21:00

1.token原理及传递方式

原理

客户端把用户的用户名和密码发到服务端

服务端进行校验,校验成功会生成token, 把token发送给客户端

客户端自己保存token, 再次请求就要在Http协议的请求头中带着token去访问服务端,和在服务端保存的token信息进行比对校验。

传递方式

找了个带csrftoken的网站修改资料处,点击保存抓包

1619457348_6086f544ec6abfcc4b629.png!small?1619457354111

1619457414_6086f586d4880ded176da.png!small?1619457420778

显而易见的是csrftoken作为post的参数进行提交

2.csrf

csrf的本质是可以携带cookie做身份伪造,那么为什么token可以进行验证呢?

上一个csrf利用的html代码

<html>
<body onload="javascript:fireForms()">
<script language="JavaScript">
var pauses = new Array( "42" );
function pausecomp(millis){
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);}
function fireForms(){
    var count = 1;
    var i=0;
    for(i=0; i<count; i++){
        document.forms[i].submit();
        pausecomp(pauses[i]);}}
</script>
<form method="POST" name="form0" action="http://192.168.38.132:80/dvwa/vulnerabilities/csrf/?password_new=12345678&password_conf=12345678&Change=Change">
<input type="hidden" name="password_new" value="123123"/>
<input type="hidden" name="password_conf" value="123123"/>
<input type="hidden" name="Change" value="Change" />
</form>
</body>
</html>

html的表单提交,在这个页面post了password_new和password_conf两个参数给action的url

3.防御原理

对比两种方式区别

csrf利用方式为利用from表单提交参数给被攻击站,参数必存在于from表单中

token传递为被攻击站点击站内按钮,激活站内post传递参数,参数中存在token

可防御原因

token不会像cookie一样被自动添加,必须激活站内按钮进行post传递

csrf无法让被攻击站模拟出按钮点击动作

思考

python request 和这样的html提交无区别,都无法获取cookie

利用模拟浏览器,这样会开一个新的浏览器

# web安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录