CSRF(Cross-site request forgery )跨站请求伪造
条件
- CSRF的攻击建立在浏览器与web服务器的会话中
- 直接的利用了用户浏览器保存的Cookie 让用户去执行某个动作
- 欺骗用户访问URL
- 让用户在同一浏览器中打开恶意URL,该网页会向用户登录的网站,发送请求,而服务器会认为请求是用户发出的,执行后,攻击成功
如何判断是否存在CSRF漏洞
- 判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。
- 要确定web应用的所有功能,哪些操作是敏感的,比如:修改密码,转账、发表留言
CSRF与XSS的区别
CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限(如,获取用户Cookie),然后实施破坏
攻击场景
get
- 直接在URL中构造相关参数,诱导用户点击访问URL
post
-
可以构造一个form表单,利用JavaScript自动提交表单,(自动执行submit)
如:<script>document.getElementById('submit').click();</script>
伪装
-
设置跳转页面
-
设置不跳转页面
-
利用AJAX
-
通过form表单的target,如
<iframe> frameborder="0" name="myiframe" width="0px" height="0px"></iframe> <form id="myform" method="post" target="myiframe" action="...">
-
Cookie机制
- 本地cookie(持久型cookie),设定了Expire字段,存储于本地
- 临时cookie(session cookie),存储在内存中,关闭浏览器时,失效
预防CSRF
- 二次确认
- Token认证
- 验证码认证:
- Token认证: