代码之家  ›  专栏  ›  技术社区  ›  James Hiew

403尝试通过SSH隧道登录Django Admin时出现CSRF错误

  •  0
  • James Hiew  · 技术社区  · 9 年前

    我试图通过另一台服务器登录Django应用程序的管理面板(比如 123.123.123.123 ). 我打开了一个ssh隧道,就像 ssh -L 3000:my.website.com:443 user@123.123.123.123 .然后我可以去 https://localhost:3000/admin/login/ 并查看运行的服务器的Django管理员的登录页面 my.website.com 无论我输入了什么凭据,都会导致HTTP 403的CSRF验证失败。请求被中止错误页。

    当直接转到时,我不会看到此错误 my.website.com/admin/login/ .哪些设置可能有助于允许通过SSH隧道登录?我已经试过添加 'localhost' ALLOWED_HOSTS .CSRF Cookie是安全的(仅通过HTTPS可用,我一直在使用),并设置了HTTPOnly标志。

    1 回复  |  直到 9 年前
        1
  •  1
  •   GwynBleidD    9 年前

    Django会看到您正在尝试访问 my.website.com 域,它将向您发送该域的cookie。

    但您的浏览器实际上正在访问 localhost 域名,所以cookies 我的网站 对它无效,浏览器不会将它们发送回Django服务器。

    解决这个问题的一种方法是指向 我的网站 至127.0.0.1,使用 /etc/hosts ,将隧道端口更改为443并连接到 我的网站 相反

    另一种方法是在您和django服务器之间设置任何服务器,该服务器将重写从一个域到另一个域的cookie和其他路径。