【问题标题】:Are there any security implications of serving a page over HTTP on the same domain, but different port, as a service served over HTTPS?在同一域但不同端口上通过 HTTP 提供页面作为通过 HTTPS 提供的服务是否存在任何安全隐患?
【发布时间】:2016-10-01 10:17:23
【问题描述】:

如果我有一个 HTML 页面在 http://example.com:123 上通过 HTTP 提供服务,另一个通过 HTTPS 在https://example.com:456/some_app 提供服务,那么 HTTPS 应用程序是否存在风险?请注意,假设已采取以下缓解措施:

  • HTTP 页面完全未经身份验证并包含公共信息
  • HTTPS 页面的 cookie 标记为 secure
  • HTTPS 页面使用双重提交等标准反 CSRF 模式

我看到的主要风险是攻击者可以拦截 HTTP 请求并发送回带有恶意 Javascript 的页面。虽然这是不可取的,但我看不到攻击可能升级的任何方式。尽管对 cookie 的访问控制过于宽松,但攻击者应该无法窃取 HTTPS 页面的 cookie,因为它们被标记为安全的。就跨源请求而言,HTTP 页面发出的请求被视为来自不同的源,因此 CSRF 保护在那里起作用。

有没有我遗漏的攻击地点?还是 HTTPS 应用程序相当安全?

【问题讨论】:

    标签: javascript security cookies cross-domain


    【解决方案1】:

    cookie 的“安全”属性可防止通过 http 请求发送 cookie,因此它们仅通过 https 发送。但是,没有什么可以阻止 http 页面上的 javascript读取 cookie,例如,如果它在传输过程中被篡改以包含额外的 javascript,或者容易受到 XSS 漏洞的攻击。

    这可以通过设置 HttpOnly 标志和安全标志来解决,但如果需要 JavaScript 来读取 cookie,这可能不适用于您的双重保护 CSRF 实施。

    编辑:下面的评论指出 Chrome (至少)在设置安全标志时会阻止这种情况,但我看不到在 RFC 中明确指出这一点,实际上第 8.5 节指出 cookie 并不总是遵循相同的限制通过 document.cookie 访问时的方案和路径。它还给出了使用 document.cookie 在本地访问时忽略路径限制的示例——尽管诚然没有明确提及是否可以从非 https 页面上的 javascript 读取安全 cookie。我会在谨慎方面犯错,因此假设它们对 http 页面上的 javascript 不安全,除非设置了 HttpOnly 标志。

    另一个问题是没有什么可以阻止 Http 页面设置 cookie,并覆盖现有的。同样,这可以通过拦截 http 页面响应并添加 Set-Cookie 标头来实现,或者通过在易受 XSS 攻击的页面上使用 javascript 来实现。虽然您可能认为覆盖 cookie 不会导致太多问题,但它可能会以其他人的身份登录,例如,此人可能没有意识到他们可能会在此错误登录下输入其他私人数据。

    当然,您的 https 页面也可能容易受到 XSS 的攻击,但提到的拦截攻击只是不安全 http 的问题(顺便说一句,我在其中包括配置不当的 https)。此外,用户和开发人员通常会不太小心地处理 http 页面,并且还会毫无错误地加载不安全的第三方内容。因此可能更容易受到 XSS 或其他问题的影响。

    更不用说只有端口号不同的事实,您的 http 站点可能会被拦截,并将您的 https 站点看起来像一个钓鱼站点,希望您的访问者对服务器名称感到满意并且不要'不要注意到错误的端口。

    这些只是我能想到的几个问题。

    我强烈建议不要在同一服务器名称上允许 http 和 https,建议到处使用 https,甚至建议使用 HSTS 来确保这一点。

    【讨论】:

    • 你能提供你的第一个陈述的来源吗?至少在 Chrome 中,如果我在 HTTP 页面的控制台中键入 document.cookie = "test_secure_key=test_secure_value;secure",我无法从 document.cookie 读取该 cookie。如果我通过 HTTPS 重新加载页面,我可以读取该 cookie
    • RFC (tools.ietf.org/html/rfc6265) 在这一点上并不清楚,它专注于传输端而不是本地读取 cookie。第 8.5 节确实声明“Cookie 并不总是提供路径隔离。虽然网络级协议不会将存储为一条路径的 cookie 发送到另一条路径,但一些用户代理通过非 HTTP API 公开 cookie,例如 HTML 的 document.cookie API。 ...从一个路径检索的资源可能能够访问为另一路径存储的 cookie。” Chrome 的实现是有道理的,但我不会 100% 相信其他人会限制这一点。
    • 编辑了我的答案,以包括围绕该风险的不确定性——这在我看来仍然是一种风险:-)
    • 同意。感谢更新。我应该知道永远不要将一个浏览器的实现作为标准
    猜你喜欢
    • 2012-05-25
    • 2019-11-12
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2014-03-30
    • 2013-09-20
    相关资源
    最近更新 更多