如何为允许的网站列表设置csrf令牌

时间:2014-10-15 09:15:15

标签: django webserver csrf django-csrf csrf-protection

我有两个服务器说域名" example.com"和" demo.com"。我在" demo.com"中完成了我所有的项目工作。但我想要注册" demo.com"也在" example.com"主页,用户在POST数据后被重定向到" demo.com"服务器是否提供正确或错误的信息。

我收到了csrf错误。当我给予免除csrf令牌。它工作正常,我不想要。没有使用csrf豁免,有人可以帮助我。或csrf仅免除两台服务器,即" example.com"和#34; demo.com" (允许的主机列表)

(对不起我的英文)

1 个答案:

答案 0 :(得分:0)

这是不可能的,正如@Daniel在评论中提到的那样,它不是如何运作的。每当用户访问该页面时,服务器将生成CSRF令牌。而且每次都不同。当用户提交表单时,服务器会验证它是否与发送的表单相同或不同。

您还应该了解为什么首先存在CSRF保护。例如,假设stackoverflow.com/avi/delete上的POST请求会在SO上删除我的个人资料。

现在,如果我访问一个恶意网站,它可能有一个无辜的形式,要求我的姓名和电子邮件:

<form action="http://stackoverflow.com/avi/delete" method="post">
    Your name: <input type="text"><br>
    Your email: <input type="text"><br>
    <input type="submit">
</form>

如果我登录SO并且我的会话有效,同时我从恶意网站提交上述内容,我的帐户将被删除!因为浏览器会发送SO相关的cookie,SO服务器可以识别它们。但SO的好人很聪明。 SO上的页面具有帐户删除形式,还包括CSRF令牌。每当用户访问页面时,都会生成此令牌。服务器验证它,如果相同则会删除帐户,否则,它将忽略该请求。

现在,恶意网站无法知道SO生成的CSRF令牌。因此,即使我提交表单,我的帐户仍然可以安全使用。

现在,在您的情况下,您基本上想要的是,从服务器A生成的令牌,并且您希望由服务器B验证。现在,您可以实际使用相同的令牌每次都可以使服务器B验证它。但这违背了CSRF令牌的全部目的。