【问题标题】:setting secure cookie through proxy servlet通过代理 servlet 设置安全 cookie
【发布时间】:2014-04-09 22:59:58
【问题描述】:

我有一个用户可以通过代理 sevlet 访问的 Web 应用程序 - 更大的 Web 应用程序的一部分。浏览器和更大的应用程序之间的通信由 ssl 加密。从我的嵌入式应用程序中,我想设置一个指示用户会话的安全 cookie。代理 servlet 和我的 Web 应用程序之间的通信没有加密,所以当我设置会话 id cookie 时,它​​没有安全标志。我的应用程序在 tomcat 上运行,并且来自这个 tomcat 的响应通过代理 servlet 代理到客户端的浏览器。

此 cookie 是否安全且无法被其他人劫持,尽管事实上并未指明安全?在这种情况下,浏览器可以在不安全的连接中发回 cookie 吗?

编辑:

我将详细说明该解决方案的架构以使其清楚:

有 2 个 Web 应用程序,每个应用程序都有自己的会话: 1) 用户可以直接访问,它与浏览器之间的通信由 SSL 加密。 (应用 X) 2)第二个用户无法访问,但被来自应用程序 X(应用程序 Y)的 servlet 代理 Servlet 也在代理 http 标头。

架构如下图所示:

客户端浏览器| |应用程序 X(代理 servlet)| |应用 Y

我想在客户端浏览器中从表示会话的应用程序 Y 中设置 cookie。 Cookie 标头从应用程序 Y 获取到 X 并设置到客户端的浏览器中,但不幸的是,此标头没有安全标志。我不确定它是否会在安全连接中由浏览器发回。

【问题讨论】:

    标签: java security tomcat cookies


    【解决方案1】:

    这确实不是保护您的网络应用程序的好方法,因为最重要的通信区域(浏览器之间以及它们到达您的应用程序的方式)没有加密。那是最有可能被其他人窥探的区域。没有 SSL,Cookie 本质上是不安全的,因为没有 SSL,就无法加密它们。它们只是 HTTP 事务的一部分(因此与其他事务一样安全)。

    如果 HTTP 事务通过 SSL 发生,会话本质上是安全的,因为 cookie 只包含一个相当唯一的 ID 代码,指向服务器上的存储隔间,用于 servlet 容器中的用户信息。有人可以这样做的唯一方法劫持就是他们可以拦截 cookie 并让他们的浏览器使用该 cookie。同样,SSL 是您最好的选择。

    现在,您可以使用 nonce 之类的东西在 SSL 之上添加额外的安全性。如果您想查看实时示例,有很多应用程序都在使用它们。

    【讨论】:

    • 感谢您的回答,但我认为这应该更好地解释架构的概念 :) 我认为 cookie 理论上是通过安全连接发送到浏览器的,但我不是确定当它没有被标记为安全时是否会在 SSL 中发回。应用程序 X(在我的图表上)和浏览器之间的通信是在安全连接中执行的。
    【解决方案2】:

    似乎用户的网络浏览器通过 HTTPS 远程连接到您的网络代理服务器,而您的网络代理服务器通过 HTTP 本地连接到您的应用程序。

    您仍然可以通过手动设置 cookie 的 secure 选项或手动创建 cookie 标头来将 cookie 设置为安全的。通常,Web/应用程序服务器会忽略传出 cookie 的设置。相反,通常由浏览器来执行规则。

    将带有secure 选项的cookie 发送到浏览器很重要,这样浏览器就知道除非通过HTTPS 否则不会将cookie 发回,从而防止窃听。您还应该为 cookie 添加 httponly 选项。

    在这里添加随机数不会提供任何额外的保护,因为如果可以说服受害者发送未加密的请求,攻击者将能够捕获 cookie 和随机数。

    这并不是说 nonce 本身不能很好地防止重放攻击,即使是通过 HTTPS,但它不会防止会话劫持。

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2012-07-21
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      相关资源
      最近更新 更多