===========================================================
跨站请求伪造,英文全称为Cross Site Request Forgery , 缩写CSRF,这种攻击模式用通俗易懂的话来讲就是:攻击者借用你的用户身份,来完成一些需要依靠用户信息来完成的事情,例如转账 、发送邮件……
(1)跨站请求伪造的例子
我们来以转账为例,假设下面是一个转账支付页面:
这一段转账的流程很重要,一定要看懂:
-
只要用户登录了自己的账户,这个支付页面就会显示用户的名称 、以及余额, 在下面的表单里,只要填上目标账户名(target_user)以及转账金额(money),点击提交, 客户端就会将
target_user
和money
两个参数发送给服务器。 -
服务器接收到该请求,并且接收到了这两个参数。 然后判断转账用户是否已登录(实质就是判断客户端是否有该用户的cookie信息),是的话就将该账户里的余额转一定金额(money)给目标账户(target_user),这样就完成了钱的转账。
我们了解完正常的转账流程,我们再来看看攻击者是如何进行跨站域请求伪造的:
- 首先攻击者自己模仿这个转账网页, 写了一个表单, 表单的参数名也都写的跟这个网页相同,并且直接填好了提交表单的参数(转账的目标账户:攻击者自己的账户,转账金额:看攻击者想要多少钱了),如下面的代码
- 攻击者再设置一个非常吸引人的网页,比如说该网页里面有很多美女的图片, 同时攻击者在里面放了一个
iframe
标签,并且该标签设置为不可见,让别的用户无法察觉,该标签里面加载的是步骤1中设置的网页,代码如下:
-
当用户被攻击者诱导着去点击了这个诱人的网站以后, 用户正开心的欣赏着网页里的图片呢,但是这个隐藏的 iframe 标签已经加载了攻击者设计的自动提交表单页面, 此时提交的表单参数就是攻击者设计好的,即
target_user=blackPerson&money=1000
,该表单请求正常发送给服务器。 -
服务器接收到该表单请求,同时接收到请求参数。先判断用户是否登录(判断是否存在用户的 cookie 信息),因为这个请求是在正常用户浏览器上发送的, 所以服务器会判断为该用户已登录;然后就将该用户的钱转1000(money)到 blackPerson (target_user) 的账户上。
-
就这样,一次跨站请求伪造就完成了,看看你们以后谁还敢乱登网站看图片哈哈哈哈哈,废话不多说,我们接下来看看如何防御这种攻击吧。
(2)防御跨站请求伪造
防御跨站请求伪造的方式一共有三种:
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!