跨站请求伪造CSRF

2021-07-25 10:00:58 zujifang

概念


 跨站请求伪造(Cross-site request forgery,简称为CSRF),也被称为one-click attack或者session riding。


 攻击者通过一些手段伪造请求模仿用户提交表单的行为,从而达到修改用户数据或执行特定任务的目的。通常是攻击者欺骗用户浏览器来访问一个认证过的网站并进行一些步骤(比如发消息、购物、转账等),由于简单的网站用户身份验证只要验证了请求发自用户的浏览器就会被执行,因此这种方法能够轻而易举地欺骗网站从而通过身份验证。


 假如,一家银行用来执行转账操作的URL地址如下:


 examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName


 一个恶意攻击者可以在另一个网站上放置如下代码:


 <img src="examplebank.com/withdraw?account=wangdun&amount=100&for=Badman">


 假如有个账户名为ZUJIFANG的用户访问了恶意站点,而他在这之前才刚访问过银行不久、登陆信息尚未过期,马上就会发现自己的银行账户莫名其妙地少了100元。


危害


 现在有很多形式的恶意网址被大量发布于网络中,攻击者不需要控制这些网址,只需要将大量地址藏匿于博客、论坛等任何能够发布信息的网站中就可以。


 这意味着,假如服务端没有合适的防御措施,用户即使访问已通过安全审核的网页也有遭受攻击的危险。


解决方法


 (一)增加攻击的难度。GET请求是很容易创建的,用户点击一个链接就可以发起GET类型的请求,而POST请求相对比较难,攻击者往往需要借助JavaScript才能实现;因此,确保form表单或者服务端接口只接受POST类型的提交请求,可以增加系统的安全性。


 (二)对请求进行认证,确保该请求确实是用户本人填写表单或者发起请求并提交的,而不是第三者伪造的。


 正常情况下一个用户提交表单的步骤如下:


 1)用户点击链接→网站显示表单→用户填写信息并提交→网站接受用户的数据并保存


 而一个CSRF攻击则不会走这条路线,而是直接伪造第二步网站显示表单从而提交用户信息


 2)攻击者通常直接跳到第二步(网站显示表单)→伪造要修改的信息并提交→网站接受攻击者修改参数数据并保存


 只要能够区分这两种情况,就能够预防CSRF攻击。那么如何区分呢? 就是对第二步中所提交的信息进行验证,确保数据源自第一步的表单。具体的验证过程如下:


 3)、用户点击链接→网站显示表单,表单中包含特殊的token同时把token保存在session中→用户填写信息并提交,同时发回token信息到服务端→网站比对用户发回的token和session中的token应该一致,则接受数据并保存


 这样,假如攻击者伪造了修改的信息并提交,是没办法直接访问到session的,所以也没办法拿到实际的token值;请求发送到服务端,服务端进行token校验的时候发现不一致则直接拒绝此次请求。


标签: CSRF

微信联系

电话
客服
产品
机房
'); })();