手动CSRF验证

时间:2015-08-12 09:24:53

标签: python django csrf

我有一个电子商务Django应用程序,它使用POST使用CSRF令牌自动验证所有传入的CSRFViewMiddleware请求。

现在,对于付款,我正在使用支付网关,我将相关详细信息与csrfmiddlewaretoken一起传递,以便在第三方网站上的交易完成后将其返回给我。因此,当用户被重定向回我的网站时,我得到了一个

403 Forbidden
CSRF verification failed. Request aborted.

我该如何解决这个问题?我有什么方法可以使用csrftoken或类似的东西手动检查request.POST.get('csrfmiddlewaretoken')

我宁愿不要完全绕过csrf,因为我希望它是安全的(至少,尽可能多)。

编辑我理解csrfmiddleware令牌需要在标头中传递,但我无法做到这一点,因为我可以使用第三方支付网关做的事情有限。

1 个答案:

答案 0 :(得分:2)

从这个片段中,我感觉你可能不太明白什么是CSRF:

  

我有一个电子商务Django应用程序,可以自动验证所有   使用CSRFViewMiddleware使用CSRF令牌传入POST请求

那就是你的问题。 CSRF仅适用于从您的网站或您的网站发出的请求(请参阅OWASP's definition of CSRF):

  

跨站点请求伪造(CSRF)是一种在发生时发生的攻击   恶意网站,电子邮件,博客,即时消息或程序原因   用户的Web浏览器,用于在受信任的站点上执行不需要的操作   用户当前已通过身份验证。

您只需要在您的网站生成的表单上张贴CSRF令牌,并将其发布到您的网站。此外,任何发送POST请求的JavaScript代码也应受到适当保护。

对于所有其他端点 - 例如,如果某个支付提供商将结果发布回您的应用程序 - 您不希望启用CSRF保护,否则请求将继续失败。