一,什么是CSRF
CSRF(Cross-Site Request Forgery)是一种网络安全漏洞,攻击者利用用户已经认证过的会话来执行未经用户授权的操作。攻击者会诱使用户在受信任的网站上执行恶意操作,从而利用用户的身份来发送恶意请求。这种攻击通常通过在受害者浏览器中注入恶意代码或链接来实施。
CSRF攻击的目标是利用用户在目标网站上已经建立的会话,来执行一些可能危害用户的操作,比如更改用户密码、发送恶意邮件等。
CSRF攻击的危害性很大,因此开发人员和网站管理员需要注意并采取相应的措施来保护用户的信息安全。
CSRF实现的流程;
二,CSRF分析
1,CSRF漏洞的危害
- 修改账户信息
- 利用管理员账号,上传木马文件
- 传播蠕虫病毒(点击、扩散、点击……)
- 和其他攻击手段配合,实现攻击,比如XSS、SQL注入
2,常见的CSRFpayload
(1),通过图片的img src属性,自动加载,发起GET请求
使用img标签的src属性;
<img
src=
"http://xxxxxx?nameid=xxx&amount=xxx" width="0" height="0">
(2),构建一个超链接,用户点击以后,发起GET请求
使用a标签的href属性;
<a
href=
"http://xxxxxx?amount=1000&to=jiangang" taget="_blank">xxx<a/>
(3),通过提交隐藏的表单,用户点击,自动提交,发起POST请求
<form action=
"http://xxxxxx" method=POST>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="1000" />
<input type="hidden" name="to" value="jiangang" />
</form>
<script> document.forms[0].submit(); </script>
三,CSRF漏洞的判断
1,如何判断一个网站是否含有CSRF漏洞;
是否可以从第三方接口直接调用;
2,如何对接口进行检测;
抓取正常通信的包,再次请求;
3,自动化的检测工具;
(1),burpsuite 的内置模块;
抓包之后使用内置的模块生成;
(2),CSRFTester(半自动化的工具);
(3),各种的云安全厂商;
四,SCRF漏洞的防御
1,对请求进行区分(来自前端页面还是第三方网站)
(1),Referer字段;
HTTP协议请求头的Referer字段用于指示当前请求的来源页面的URL(跟踪);这个字段可以帮助服务器识别用户是从哪个页面跳转过来的,有助于进行统计分析、安全验证等操作;Referer字段的格式通常是一个URL,示例如下:
Referer: https://www.example.com/page1
在实际的HTTP请求头中,Referer字段可能会包含更多的信息,如查询参数等。
这样就可以对请求进行区分;
缺点:HTTP的请求可以随意的修改;导致Referer字段被修改(伪造);
2,前端页面和伪造页面的差异性
在自己的页面中添加某些东西,使第三方的网站不可知,在请求到达后端服务器的时候进行匹配;
例如token字段的设立;
- 用户在输入用户名和密码进行登录的过程中,服务器下发随机token,并且将其保存在session中;
- 客户端将token存放在隐藏字段中;
- 客户端在登录状态下,每一次的访问都要携带;
- 服务器收到请求进行比较;
- 客户端退出登录,销毁token;
3,验证码及二次验证
使用验证码是一种有效的防御CSRF漏洞的方法之一。通过在表单中添加一个验证码字段,用户在提交表单时需要输入正确的验证码才能完成操作,从而增加了用户在网站上执行操作的验证过程,降低了CSRF攻击的成功率。
下面是使用验证码来防御CSRF漏洞的一般步骤:
- 在表单中添加一个验证码字段,通常是一个随机生成的验证码图片或文本。
- 用户在提交表单时需要输入正确的验证码才能完成操作。
- 后端服务器验证用户提交的验证码是否与生成的验证码匹配,只有匹配的情况下才继续处理用户的请求。
- 如果验证码不匹配或者用户未提供验证码,可以拒绝处理用户的请求或者要求用户重新输入验证码。
通过以上步骤,可以有效地增加用户在网站上执行操作的验证过程,从而减少CSRF攻击的成功率。