假设一个站点一直使用所有 HTTPS(LB 将端口 80 重定向到 443),是否有任何理由不强制应用程序设置的每个 cookie 都使用 BOTH secure
AND httponly
?
例如,目前,PCI 扫描只会将 标记jsessionid
为不使用该secure
属性,但明天它可能是另一个,所以我正试图超越它。
假设一个站点一直使用所有 HTTPS(LB 将端口 80 重定向到 443),是否有任何理由不强制应用程序设置的每个 cookie 都使用 BOTH secure
AND httponly
?
例如,目前,PCI 扫描只会将 标记jsessionid
为不使用该secure
属性,但明天它可能是另一个,所以我正试图超越它。
是的,在某些情况下您不希望 HTTP ONLY 或 SECURE。
如果您需要 javascript 来查看 cookie 值,则删除 HTTP-Only 标志。几个案例 - 一些网站使用 javascript 来跟踪 cookie 中的页面状态以读取和写入 cookie 值。CSRF 缓解通常依赖于服务器在 cookie 中发送一个值,并期望 javascript 读取该值。
安全标志更为重要。如果我们希望所有站点都通过 https 运行,并且只有 https,那么唯一的 http 部分就是重定向到 https。您永远不希望您的 cookie 以明文形式发送。嗯,几乎从来没有。以下是您可能的两种情况:
在实践中,如果您正在运行 https 站点,请始终设置安全 cookie,并且始终通过设置 HTTPONLY来确保安全,除非您知道您的 javascript 需要 cookie 访问权限。
更新 - 开发中的 TLS
很多关于你是否应该在开发中使用 TLS 的讨论。在这里发布问题:
关于httponly
您本质上是在询问它们是否是需要通过 Javascript 读取或设置 cookie 的用例。通常,用户界面的某些设置(语言选择...)会以这种方式保留,如果 cookie 是 httponly,则会中断。
至于secure
:因为根据您的描述,该站点一直在使用 https,因此拥有所有 cookie 并没有什么坏处secure
。
安全标志
考虑到应用程序是通过HTTPS运行的,即LB将所有80端口的流量重定向到443,仍然需要根据以下场景启用安全标志。
因此,尽管 LB 被配置为将端口 80 的不安全流量重定向到端口 443 的安全流量,但成功的 MiTM 攻击可能发生在step 2
通过窃取敏感 cookie 导致冒充用户的情况下。此外,与在敏感 cookie 上启用安全标志相比,验证超链接和重定向是否正确编码是一项相对更加费力的活动。总而言之,尽管在 LB 级别设置了重定向,但由于缺少安全标志,可能会执行富有成效的 MiTM。
httponly 标志
这是一个标志,其意义独立于传输层安全性 (SSL/TLS)。httponly 标志用于防止 javascript 在成功的跨站点脚本 (XSS) 攻击事件中访问敏感 cookie,例如会话 cookie。如果未在 cookie 值上设置 httponly 标志,由于应用程序级缺陷而注入应用程序的恶意 javascript 最终可能会通过读取会话 cookie 并将其发送到远程服务器来破坏用户帐户的机密性、完整性和可用性。 ,从而成功冒充合法用户。因此,应该始终在所有 cookie 或至少敏感的 cookie 上设置 httponly 标志。
我会给你一个非 httponly cookie 的实际例子。
当访问者来到我的网站时,他/她的喉咙里塞了两个饼干。
phpsession -> secure httponly samesite:lax
cookie_law -> secure samesite:lax
包含一个 base64 编码的cookie_law
json 编码的 cookie 对象,用于存储 cookie 设置。
我的 javascript 读取这些 cookie 以确定加载分析,adwords 依赖于权限或状态。
我的 javascript 也使用该 cookie 来使 cookie 设置编辑器工作。
如果我在 cookie 上设置 httponly 标志,则 javascript 无法读取它。由于多层缓存,我无法在渲染脚本时使用 php 来确定加载状态。这就是为什么我选择离开那个 cookie 的 httponly。
javascript 需要访问才能读取它。