为什么 werkzeug 不允许使用 localhost 作为 cookie 域?

Ali*_*Ali 6 python cookies werkzeug flask

我正在使用 Flask,当我尝试用作localhostcookie 域时,werkzeug 说:

ValueError: Setting 'domain' for a cookie on a server running localy (ex: localhost) is not supportted by complying browsers. You should have something like: '127.0.0.1 localhost dev.localhost' on your hosts file and then point your server to run on 'dev.localhost' and also set 'domain' for 'dev.localhost'
Run Code Online (Sandbox Code Playgroud)

这种情况很糟糕,每个开发人员都必须在hosts文件中设置一个域才能使项目正常运行。我不明白为什么 werkzeug 会阻止这种情况!

问题是:

  • werkzeug 为什么要这样做?
  • 如果可以用作localhostcookie 域会发生什么?
  • 我怎样才能忽略这个错误?

Sea*_*ira 5

问题不在于 Werkzeug 阻止基于域的 cookie 的设置,而在于大多数浏览器不支持范围为 localhost(或任何其他单字域)的域限制 cookie。Werkzeug 不会让您自己调试这个问题(为什么我的会话不被尊重),它会检测您何时使用此设置并立即出错。

我发现的最接近的东西是伪规范

域=DOMAIN_NAME

在 cookie 列表中搜索有效 cookie 时,会将 cookie 的域属性与从中获取 URL 的主机的 Internet 域名进行比较。如果存在尾部匹配,那么cookie将通过路径匹配来查看是否应该发送。“尾部匹配”意味着域属性与主机的完全限定域名的尾部进行匹配。“acme.com”的域属性将匹配主机名“anvil.acme.com”以及“shipping.crate.acme.com”。

只有指定域内的主机才能为域设置 cookie,并且域中必须至少有两 (2) 或三 (3) 个句点,以防止以下形式的域:“.com”、“.edu”和“ VA.US”。[强调我的] 任何在下面列出的七个特殊顶级域之一中失败的域只需要两个句点。任何其他域至少需要三个。这七个特殊顶级域是:“COM”、“EDU”、“NET”、“ORG”、“GOV”、“MIL”和“INT”。

如果允许使用单名称域,黑客就可以为其设置 cookie .com,然后让浏览器将该 cookie 传输到.com最终用户访问的每个域。

另请参阅:http://daniel.haxx.se/blog/2011/04/28/the-cookie-rfc-6265/

  • @Ali - Werkzeug 支持在本地主机上运行就好 - 问题是当您使用子域时(例如设置 [`SESSION_COOKIE_DOMAIN` 或 `SERVER_NAME` 这样您就可以使用子域](http://flask.pocoo.org/docs/config /#内置配置值))。由于“那个”并不是所有浏览器都支持,Werkzeug 会阻止你(因为“大多数”东西仍然可以工作 - 因此调试地狱)。 (2认同)