1

我刚刚完成了 Django 1.4 教程的第 4 部分,我敢肯定他们只是把 CSRF 和通用视图扔进去,把我搞糊涂了。

好的,我现在得到的通用视图,但我不明白 CSRF 保护发生了什么。

这就是我认为正在发生的事情:CSRF 令牌是由应用程序中使用的模块生成的哈希/密钥,如果已登录,则为登录用户。令牌以某种方式通过 POST 方法表单发送到接收视图,该视图再次生成散列并将其与随表单发送的进行比较以确保没有人窥探?我完全错了吗?

在教程中使用了 Django 手册的其余部分,这是迄今为止我读过的最令人困惑的手册页。

4

1 回答 1

2

这很令人困惑,因为它解决了 Web 浏览器的一个微妙漏洞。

假设我们有两个站点:site.com 和 evil.com。然后 evil.com 的所有者,如果他知道 site.com 网站的结构(如果他会使用,这很容易),就可以设置一个针对它的表单。

<form action="http://target.com/my_account/_delete" method="POST">
    <input type="submit" value="Click Here for candy"></input>
</form>

任何点击它并登录到 site.com 的人都会立即触发链接到的操作(在这种情况下,销毁他们自己的帐户)。

csrf 令牌的想法是合法形式如下所示:

<form action="http://target.com/my_account/_delete" method="POST">
    <input type="hidden" name="csrf_token" value="AEyaF8af8AIHJFA0L"></input>
    <input type="submit" value="Don't click this unless absolutely sure!"></input>
</form>

并且因为这个值是用户特定的,并且只有网站知道并显示在网站上,所以用户现在是安全的,并且不能在没有先通过正确页面的情况下删除他们的帐户,因为攻击者的任何页面都不会知道这个值.

希望这更清楚。

于 2013-01-28T00:07:04.497 回答