我正在尝试通过另一台服务器(例如123.123.123.123
)登录Django应用程序的管理面板。我有一个像ssh -L 3000:my.website.com:443 user@123.123.123.123
那样的ssh隧道。然后我可以转到https://localhost:3000/admin/login/
并查看在my.website.com
上运行的服务器的Django管理员的登录页面。无论我输入什么凭据,都会导致HTTP 403&CSRFF验证失败。请求中止。错误页面。
直接转到my.website.com/admin/login/
时,我不会收到此错误消息。哪些设置可能有助于允许通过SSH隧道登录?我已尝试将'localhost'
添加到ALLOWED_HOSTS
。 CSRF cookie是安全的(仅通过HTTPS提供,我一直使用)并设置了HTTPOnly标志。
答案 0 :(得分:1)
Django会发现您正在尝试访问my.website.com
域名,并会向您发送该域名的Cookie。
但您的浏览器实际上是访问localhost
域名,因此my.website.com
的Cookie不会对其有效,浏览器也不会将其发送回Django服务器。
解决此问题的一种方法是使用my.website.com
将/etc/hosts
指向127.0.0.1,将您的隧道端口更改为443并改为连接到my.website.com
。
另一种方法是在你和你的django服务器之间设置任何服务器,它将把cookie和其他路径从一个域重写到另一个域。