在HTML中使用令牌时,CSRF保护意义何在?

时间:2017-08-21 14:50:27

标签: javascript html security csrf csrf-protection

我是网络安全和CSRF的新手。

我已经阅读了最受欢迎的CSRF保护方式是将CSRF令牌放在HTML表单中或放在META标记中,以便在JavaScript中为AJAX操作读取它。

但是我不明白在不同站点使用cookie数据的黑客能够读取HTML中CSRF令牌的价值,并使用它向用户登录的站点发送请求。

请为我解释一下。

1 个答案:

答案 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机制。

我希望这是可以理解的,如果没有,你可以在评论中提问。