javascript - 作为通过 HTTPS 提供的服务,在同一域但不同端口上通过 HTTP 提供页面是否存在任何安全隐患?

标签 javascript security cookies cross-domain

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

  • 该 HTTP 页面完全未经身份验证,并且包含公开信息
  • HTTPS 页面的 Cookie 被标记为安全
  • HTTPS 页面使用标准的反 CSRF 模式,例如双重提交

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

是否有我遗漏的攻击地点?或者 HTTPS 应用程序相当安全吗?

最佳答案

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

这可以通过设置 HttpOnly 标志以及 secure 标志来修复,但如果需要 JavaScript 来读取 cookie,这可能不适用于您的双重保护 CSRF 实现。

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

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

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

这更不用说这样一个事实:仅端口号不同,您的 http 站点就可能被拦截,并使其看起来像您的 https 站点一样,成为网络钓鱼站点,希望您的访问者对服务器名称感到满意,并且不这样做没有注意到错误的端口。

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

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

关于javascript - 作为通过 HTTPS 提供的服务,在同一域但不同端口上通过 HTTP 提供页面是否存在任何安全隐患?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578948/

相关文章:

javascript - 读取下一页的文本区域值。存储下一页的值

javascript - 将 TextBox 值获取到 ToolTip 标题

javascript - 无法在 p-autocomplete 中将值绑定(bind)到 ngModel

c++ - 如何在 Windows 中获取文件安全属性

security - 当您决定返回 403 时始终返回 404

javascript - Cookie 无法被脚本读取

javascript - 我可以防止意外覆盖 TypeScript/JavaScript 中的局部变量吗?

javascript - 在单独的 div 悬停上缩放图像

JavaMail 保存密码

javascript - res.clearCookie 函数不会删除 cookie