2

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

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

编辑:

我将指定该解决方案的更多架构以使其清楚:

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

架构如下图所示:

客户端浏览器| <-SSL-> |应用程序 X(代理 servlet)| <-内部网络,无 SSL -> |应用程序 Y

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

4

2 回答 2

1

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

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

将带有secure选项的 cookie 发送到浏览器很重要,因此浏览器知道除非通过 HTTPS,否则不会将 cookie 发回,从而防止窃听。您还应该包括httponlycookie 的选项。

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

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

于 2012-07-31T13:47:11.017 回答
1

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

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

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

于 2012-07-31T13:16:56.130 回答