我是网络安全和CSRF的新手。
我已经阅读了最受欢迎的CSRF保护方式是将CSRF令牌放在HTML表单中或放在META标记中,以便在JavaScript中为AJAX操作读取它。
但是我不明白在不同站点使用cookie数据的黑客能够读取HTML中CSRF令牌的价值,并使用它向用户登录的站点发送请求。
请为我解释一下。
答案 0 :(得分:1)
CSRF令牌的发明是为了防止生态系统外部对服务器的操作。
在网络世界中,阻止从原始网站发布表单(可以是服务器上的任何其他操作)。
你问的是,如何将隐藏字段放入表单中并使用一些生成的令牌,服务器可以确保它获得的Post
请求来自网站的形式而不是来自其他地方。
例如,如果我是攻击者并且您的表单没有这样的令牌,我可以在我的网站上创建一个表单,action
字段将指向您的服务器位置。< / p>
<form method="POST" action="http://your-site.com/transfer-mony.php">
<input type="text" name="amount" value="100000" />
<button>submit</button>
</form>
如果您有令牌,并且您的服务器将在每次请求时验证它,我的表单中的帖子将被拒绝。
所以你问,好吧,我可以去原始网站并复制那个令牌,就是这样。
因此,基本上,令牌应该是一次性的,它们仅对下一个用户操作有效。 令牌可以包含用户IP,并使用私钥签名,然后如果您将我的令牌复制给您,服务器将拒绝该请求,因为令牌内的IP与发送请求的客户端的IP不一致。
JWT,是其中一项技巧
今天更常见的做法(感谢Angular),服务器返回带有令牌的 Cookie ,下一个请求必须在 Headers 上请求。
注意,您的网站有XSS个漏洞,基本上可以绕过所有CSRF机制。
我希望这是可以理解的,如果没有,你可以在评论中提问。