CSRF「Cross-site request forgery」
我们知道了同源策略可以隔离各个站点之间的 DOM 交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了 Web。这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三方资源,然后又引入 CSP 策略来加以限制;默认 XMLHttpRequest 和 Fetch 不能跨站请求资源,然后又通过 CORS 策略来支持其跨域。
所以安全性降低了,为了更好的技术应用,同时也带来了更多的安全隐患,如XSS,CSRF。
什么是CSRF?
跨站请求伪造,冒用Cookie中的信息,发起请求攻击。
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF攻击过程
满足了上面的必要条件才可以触发
- 当用户已经登录成功了一个网站
- 然后通过被诱导进了第三方网站「钓鱼网站」
- 跳转过去了自动提交表单,冒用受害者信息
- 后台则正常走逻辑将用户提交的表单信息进行处理
CSRF攻击类型
GET类型
img标签 script。
<!DOCTYPE html>
<html>
<body>
<h1>黑客的站点</h1>
<img src="https://www.bank.com/withdraw?amount=1000?for=hacker">
</body>
</html>
黑客将转账的请求接口隐藏在 img 标签内,欺骗浏览器这是一张图片资源。当该页面被加载时,浏览器会自动发起 img 的资源请求,如果服务器没有对该请求做判断的话,那么服务器就会认为该请求是一个转账请求,于是用户账户上的 100 就被转移到黑客的账户上去了。
POST类型
表单中的post请求
<form action="http://bank.com/withdraw" method=POST>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="10