假设一个站点一直使用所有 HTTPS(LB 将端口 80 重定向到 443),是否有任何理由不强制应用程序设置的每个 cookie 都使用 BOTH secureAND httponly?
例如,目前,PCI 扫描只会将 标记jsessionid为不使用该secure属性,但明天它可能是另一个,所以我正试图超越它。
假设一个站点一直使用所有 HTTPS(LB 将端口 80 重定向到 443),是否有任何理由不强制应用程序设置的每个 cookie 都使用 BOTH secureAND 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_lawjson 编码的 cookie 对象,用于存储 cookie 设置。
我的 javascript 读取这些 cookie 以确定加载分析,adwords 依赖于权限或状态。
我的 javascript 也使用该 cookie 来使 cookie 设置编辑器工作。
如果我在 cookie 上设置 httponly 标志,则 javascript 无法读取它。由于多层缓存,我无法在渲染脚本时使用 php 来确定加载状态。这就是为什么我选择离开那个 cookie 的 httponly。
javascript 需要访问才能读取它。