- Tag
- HTTP
CSRF 利用了 Web 中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
例子:
- 一家银行用以运行转账操作的 URL 地址如下:https://bank.example.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
- 恶意攻击者可以在另一个网站上放置如下代码:<img src=”https://bank.example.com/withdraw?account=Alice&amount=1000&for=Badman” />
- 如果有账户名为 Alice 的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失 1000 资金
防御措施:由于 CSRF 的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在 cookie 中,并且攻击者无法伪造的数据作为校验, 那么攻击者就无法再运行 CSRF 攻击。
比如:
- 利用模板引擎在渲染时向 HTML 表格中嵌入 CSRF Token:
<form method="post"> {% csrf_token %} </form>
参考:
理解:
- cors 客户端对外域的防护
- csrf 服务端对外域的防护