SESSION_COOKIE_HTTPONLY = True 不能在 Django 中工作:

Posted

技术标签:

【中文标题】SESSION_COOKIE_HTTPONLY = True 不能在 Django 中工作:【英文标题】:SESSION_COOKIE_HTTPONLY = True not working in Django: 【发布时间】:2015-11-06 15:33:51 【问题描述】:

我在settings.py 中设置了以下代码:

SESSION_COOKIE_HTTPONLY = True

尽管docs 说这是默认设置。

然后我使用./manage.py runserver 并在站点上运行 OWASP Zap 扫描程序。但是 OWASP zap 说 cookie 是在没有 HttpOnly 标志的情况下设置的:

当我使用gunicornnginx 为站点提供服务时,我也遇到了这个问题。我怎样才能设置这个标志?

使用django 1.8accounts/login 页面由 django-registration-redux 管理,如果相关的话。

【问题讨论】:

【参考方案1】:

您在屏幕截图中突出显示的 cookie 不是会话 cookie,而是 csrf cookie。此 cookie 有一个单独的设置 CSRF_COOKIE_HTTPONLY。与SESSION_COOKIE_HTTPONLY 不同,CSRF_COOKIE_HTTPONLY 默认为False,因此您需要在设置中添加它。

CSRF_COOKIE_HTTPONLY = True

请注意,将 csrf cookie 设置为仅 http 会使执行 ajax 发布请求变得更加棘手。您的 javascript 将不得不从页面中提取 csrf 令牌,而不是使用 cookie。

【讨论】:

可以肯定地说设置CSRF_COOKIE_HTTPONLY = True 不会对仅https 的网站产生严重的安全隐患吗? 我不是安全专家,所以我觉得没有资格给出明确的答案。如果您确实设置了CSRF_COOKIE_HTTPONLY=True,恶意javascript 仍然可以从令牌在html 中的页面加载令牌。 Django-developers 邮件列表上有一个相关的discussion。

以上是关于SESSION_COOKIE_HTTPONLY = True 不能在 Django 中工作:的主要内容,如果未能解决你的问题,请参考以下文章