什么是 CSRF 攻击?
客户端请求伪造 CSRF (Cross-Site Request Forgery),攻击者诱使受害者在已认证的情况下执行非自愿的操作,导致未授权的请求在受害者的名义下被提交。它是通过欺骗用户浏览器发送一个不合法的请求(通常是修改数据或执行某种操作)来达到攻击目的,攻击者不需要直接获取受害者的账户信息就能进行攻击。

- 受害者登录到网站:受害者在一个网站上登录并获得身份认证(如通过 Cookie 保持会话)。
- 攻击者诱导受害者:攻击者通过某种方式诱导受害者访问恶意网站或点击恶意链接。这些链接或请求会利用受害者的认证信息(如 Cookie)发起请求。
- 恶意请求被发出:当受害者浏览恶意网站时,网站上嵌入的恶意代码或链接会导致受害者的浏览器发送请求到受害者已经登录的目标网站(例如:转账请求、修改账户设置等)。
- 目标网站执行操作:由于目标网站无法区分是合法的用户请求还是恶意的请求,它会认为请求来自受害者的浏览器,并执行相应的操作。
CSRF利用
GET型利用
假设某网站存在CSRF,用户已经登录了一个银行网站,攻击者构造了如下的链接发送给用户,只要用户访问就会向攻击者的账户转账100元:
http://bank.com/transfer?to=attacker&amount=100
短链接
在实际利用中,直接发送链接给用户目的太明显了,简单看一下都可以知道大概的功能,而短链接可以将链接地址的目的隐藏,攻击者会使用短链接服务将这个 URL 压缩成一个短链接:
https://short.link/xyz123
POST型
POST型相比GET型要稍微复杂,get型可以通过在url传参,而post则不可以,而攻击者可以通过构造页面来执行请求伪造,这里并不能直接用Javascript请求,因为Javascript会被浏览器的[[CORS(跨域资源共享)|CORS策略|]]阻拦。
<form action="http://socialmedia.com/post" method="POST" id="csrfForm">
<input type="hidden" name="content" value="You won a lottery!" />
<input type="hidden" name="token" value="valid-csrf-token" />
</form>
<script>
document.getElementById('csrfForm').submit();
</script>
如何防止CSRF攻击?
- 使用Token机制:一种常见的防范方法是在表单中加入一个随机生成的Token(防伪标记),每次提交表单时都验证Token是否一致。这样攻击者无法知道Token,因此无法伪造有效请求。
- 检查请求头:服务器可以验证请求的
Referer、Origin头部,确保请求来源于同一个域名,拒绝来自外部站点的请求。 - 请求时使用双重身份验证:对于敏感操作(如转账、修改密码等),可以通过多因素身份验证(例如验证码)进行二次验证。
- . 防火墙和安全设置:部署Web应用防火墙(WAF)和定期进行安全性检查,发现并修复潜在的漏洞。

1788

被折叠的 条评论
为什么被折叠?



