Django中的跨站点请求伪造保护 - 更好的解释?

时间:2013-01-27 23:55:01

标签: django csrf

我刚刚完成了Django 1.4教程的第4部分,我确信他们只是放弃了CSRF和通用视图来混淆我的内心。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

假设我们有两个网站: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>

并且由于此值是特定于用户的,并且仅在网站上显示并显示,因此用户现在是安全的,并且无法在未经过正确页面的情况下删除其帐户,因为攻击者的任何页面都不会知道这个价值。

希望这更清楚。