2012-07-31 72 views
2

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

这个cookie是否安全并且无法被他人劫持,尽管事实并非如此安全?在这种情况下,浏览器能否在不安全的连接中发回cookie?

编辑:

我会指定sollution的一点点架构要清楚:

有2个Web应用程序,每个人都有自己的会话: 1)一种是直接入店给用户,它和浏览器之间的通信通过SSL进行加密。 (应用程序X) 2)第二个不能被用户访问,但是被应用程序X(应用程序Y)中的servlet代理。Servlet也在代理http头文件。

建筑看起来像这个图:

客户浏览器| < -SSL-> |应用程序X(代理servlet)| <-internal network,no SSL - > | application Y

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

回答

1

这确实不是保护您的Web应用程序的好方法,因为最重要的通信区域(浏览器和它们到达您的应用程序之间)未加密。这是最有可能被别人窥探的地区。如果没有SSL,Cookie本身就是不安全的,因为没有SSL就无法加密它们。它们只是HTTP事务的一部分(因此只与其余部分一样安全)。

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

现在,您可以使用类似于nonce的东西来在SSL之上添加额外的安全性。如果你想看实际的例子,那里有很多应用程序在使用它们。

+0

谢谢你的回答,但我认为这应该解释建筑的想法有点更好:)我认为cookie理论上是发送给浏览器的安全连接,但我不确定它是否会如果未标记为安全,则在SSL中发回。应用程序X(在我的图中)和浏览器之间的通信以安全连接的方式进行。 – petrus 2012-07-31 13:53:44

1

看起来好像用户的Web浏览器通过HTTPS远程连接到您的Web代理服务器,并且您的Web代理服务器通过HTTP在本地连接到您的应用程序。

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

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

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

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

相关问题