gue*_*rda 326 security cookies http
我在一台机器上运行了两个HTTP服务.我只是想知道他们是否共享他们的cookie或者浏览器是否区分了两个服务器套接字.
Rem*_*eau 305
当前的cookie规范是RFC 6265,它取代了RFC 2109和RFC 2965(这两个RFC现在都被标记为"历史性")并且正式化了cookie的实际使用语法.它明确指出:
- 介绍
...
由于历史原因,cookie包含许多安全和隐私信息.例如,服务器可以指示给定的cookie用于"安全"连接,但Secure属性在存在活动网络攻击者时不提供完整性. 同样,给定主机的cookie在该主机上的所有端口之间共享,即使Web浏览器使用的通常的"同源策略"隔离了通过不同端口检索的内容.
并且:
8.5.弱机密性
Cookie不提供端口隔离.如果cookie在一个端口上运行的服务可读,则cookie也可由在同一服务器的另一个端口上运行的服务读取.如果cookie在一个端口上可由服务写入,则cookie也可由在同一服务器的另一个端口上运行的服务写入.出于这个原因,服务器不应该在同一主机的不同端口上运行相互不信任的服务,并使用cookie来存储安全敏感信息.
Tgr*_*Tgr 128
根据RFC2965 3.3.1(浏览器可能会或可能不会遵循),除非通过标头的port参数明确指定端口,否则Set-Cookiecookie可能会也可能不会发送到任何端口.
谷歌的浏览器安全手册说:默认情况下,cookie范围仅限于当前主机名上的所有URL - 而不是绑定到端口或协议信息.以后有些行没有办法将cookie限制为单个DNS名称[...]同样,没有办法将它们限制在特定端口.(另外,请记住,IE根本不会将端口号计入其同源策略中.)
因此,依赖任何明确定义的行为似乎并不安全.
Pat*_*Pat 65
这是一个非常古老的问题,但我想我会添加一个我用过的解决方法.
我的笔记本电脑上运行了两个服务(一个在端口3000上,另一个在4000上).当我在(http://localhost:3000和http://localhost:4000)之间跳转时,Chrome会传入相同的cookie,每个服务都无法理解cookie并生成新的cookie.
我发现,如果我访问http://localhost:3000和http://127.0.0.1:4000,问题走了,因为Chrome浏览器保持一个cookie本地主机,一个用于127.0.0.1.
同样,在这一点上没有人可以关心,但这对我的情况很容易和有帮助.
ZZ *_*der 19
这是cookie SOP(同源策略)中的一个很大的灰色区域.
从理论上讲,您可以在域中指定端口号,并且不会共享cookie.实际上,这不适用于多个浏览器,您将遇到其他问题.因此,只有当您的网站不是普通公众并且您可以控制要使用的浏览器时,这才是可行的.
更好的方法是为同一个IP获取2个域名,而不依赖于cookie的端口号.
小智 17
解决问题的另一种方法是使会话cookie的名称与端口相关.例如:
您的代码可以访问Web服务器配置以找出服务器使用的端口,并相应地命名cookie.
请记住,您的应用程序将同时收到两个cookie,您需要请求与您的端口对应的cookie.
cookie名称中不需要确切的端口号,但这更方便.
通常,cookie名称可以编码特定于您使用的服务器实例的任何其他参数,因此可以通过正确的上下文进行解码.
我在同一台机器上运行(并尝试调试)两个不同的 Django 应用程序时遇到了类似的问题。
我用这些命令运行它们:
./manage.py runserver 8000
./manage.py runserver 8001
Run Code Online (Sandbox Code Playgroud)
当我登录第一个,然后登录第二个时,我总是会注销第一个,反之亦然。
我将其添加到我的/etc/hosts中
127.0.0.1 app1
127.0.0.1 app2
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令启动了这两个应用程序:
./manage.py runserver app1:8000
./manage.py runserver app2:8001
Run Code Online (Sandbox Code Playgroud)
问题解决了 :)
| 归档时间: |
|
| 查看次数: |
96227 次 |
| 最近记录: |