通过代理servlet设置安全cookie

时间:2012-07-31 13:10:55

标签: java security tomcat cookies

我有一个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并设置到客户端的浏览器中,但不幸的是这个标头没有安全标志。我不确定它是否会通过浏览器以安全连接方式发送回来。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

将带有secure选项的cookie发送到浏览器非常重要,因此浏览器知道不会发回cookie,除非是通过HTTPS,从而防止窃听。您还应该为Cookie添加httponly选项。

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

这并不是说即使通过HTTPS,nonce也无法防止重放攻击,但它不会阻止会话劫持。