【发布时间】:2017-12-04 14:10:08
【问题描述】:
在我的 Django 的 settings.py 中,我有
SESSION_COOKIE_HTTPONLY = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = 'DENY'
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 15768000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_AGE = 2 * 24 * 3600
但是https://detectify.com 发现没有为 csrftoken cookie 设置此标志。我检查了 Chrome 对 cookie 的说明,如果我理解正确,空 HTTP 列确认这两个 cookie 不是仅 HTTP:
另外,如果我在 chrome 的控制台中执行 document.cookie,则会显示 csrftoken 值。
我想知道为什么会这样。我在 uwsgi 和 nginx 上运行 Django。 nginx配置如下,有问题的站点是https://rodichi.net:
server {
listen 443 ssl http2 default_server;
server_name rodichi.net;
ssl_certificate /etc/letsencrypt/live/rodichi.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rodichi.net/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
charset utf-8;
... # location settings follow here
```
【问题讨论】:
-
吃掉(删除)你的cookies。至少使用 HTTPonly 正确设置了会话 ID 之一。而你错过了CSRF_COOKIE_HTTPONLY。
标签: django nginx cookies httponly