我有一个电子商务Django应用程序,它使用POST
使用CSRF令牌自动验证所有传入的CSRFViewMiddleware
请求。
现在,对于付款,我正在使用支付网关,我将相关详细信息与csrfmiddlewaretoken
一起传递,以便在第三方网站上的交易完成后将其返回给我。因此,当用户被重定向回我的网站时,我得到了一个
403 Forbidden
CSRF verification failed. Request aborted.
我该如何解决这个问题?我有什么方法可以使用csrftoken
或类似的东西手动检查request.POST.get('csrfmiddlewaretoken')
。
我宁愿不要完全绕过csrf,因为我希望它是安全的(至少,尽可能多)。
编辑我理解csrfmiddleware
令牌需要在标头中传递,但我无法做到这一点,因为我可以使用第三方支付网关做的事情有限。
答案 0 :(得分:2)
从这个片段中,我感觉你可能不太明白什么是CSRF:
我有一个电子商务Django应用程序,可以自动验证所有 使用CSRFViewMiddleware使用CSRF令牌传入POST请求。
那就是你的问题。 CSRF仅适用于从您的网站或您的网站发出的请求(请参阅OWASP's definition of CSRF):
跨站点请求伪造(CSRF)是一种在发生时发生的攻击 恶意网站,电子邮件,博客,即时消息或程序原因 用户的Web浏览器,用于在受信任的站点上执行不需要的操作 用户当前已通过身份验证。
您只需要在您的网站生成的表单上张贴CSRF令牌,并将其发布到您的网站。此外,任何发送POST请求的JavaScript代码也应受到适当保护。
对于所有其他端点 - 例如,如果某个支付提供商将结果发布回您的应用程序 - 您不希望启用CSRF保护,否则请求将继续失败。