登录页面使用 SSL,未加密页面看不到加密会话 cookie (Grails, Acegi)

Posted

技术标签:

【中文标题】登录页面使用 SSL,未加密页面看不到加密会话 cookie (Grails, Acegi)【英文标题】:Login page uses SSL, unencrypted pages don't see encrypted session cookie (Grails, Acegi) 【发布时间】:2010-11-02 13:10:42 【问题描述】:

设置:Grails 1.1、Acegi/Spring Security 插件

我希望用户通过 SSL 登录,所以我的 channelConfig.secure[] 列表中有“/login/**”,但几乎所有其他内容都在 channelConfig.insecure[] 中。 /login 的每个请求都被重定向到 https://,而其他所有请求都被重定向到 http://。

我的问题是登录过程将 cookie 设置为“仅通过加密连接发送”,因此当登录页面重定向到 /home 时,主页看不到 cookie 并将我重定向回登录页面。当我再次尝试登录时,登录页面会看到 cookie 并重定向我……等等。

我搜索了this page about SecurityConfig,看看是否有一个选项允许通过未加密的 HTTP 读取通过 SSL 创建的 cookie,但我什么也没找到。我可以设置一些选项来使我的登录 cookie 可用于我的未加密控制器吗?

【问题讨论】:

【参考方案1】:

这将是一个漏洞。

任何可以看到会话 cookie 的中间人都可以作为用户发出请求。这几乎和被截获的密码一样糟糕。中间人无法自行建立新会话,但一旦用户登录,他将能够执行用户可以执行的任何操作。


使用 SSL 不仅仅是在登录时隐藏用户名和密码。

首先,它为客户端和服务器之间的所有消息提供机密性。将密码识别为敏感数据很容易,但哪些应用程序功能也使用敏感数据可能不那么明显。保护任何用户输入和动态生成的内容比尝试仔细评估应用程序中使用的每个数据字段的隐私问题更安全、更容易。图片、帮助页面等静态内容可能没有那么敏感,但通过分析对该内容的请求,攻击者可能会很好地了解用户在网站上的行为。

其次,SSL 为每个请求提供完整性。这可以防止攻击者修改或附加他们自己的恶意输入到用户请求,或修改服务器产生的结果。

【讨论】:

因此,将登录页面作为唯一加密页面与完全不加密一样糟糕吗?有什么方法可以避免以纯文本形式发送密码但不必加密每一页?如果没有,我将不得不改变我的方法。 差不多。您没有透露密码,如果用户在其他网站上使用相同的密码,这可能会为用户省去一些麻烦,但您的网站完全易受攻击。我用更多信息更新了我的答案。 感谢您的全面回答。我们使用未加密连接的主要原因是性能,但在阅读了另一个关于 HTTP 与 HTTPS 性能的问题 (***.com/questions/149274/http-vs-https-performance) 之后,我认为我们不会从中获得很大的速度,因为我们几乎所有的内容都是动态的。 还可以查看***.com/questions/548029/… 我尝试指出的一件事是 SSL 有自己的“会话”,如果打开它可以进一步提高性能。 我想知道这一点 - 人们总是建议使用 ssl 登录,但除非所有内容都加密,否则这是不好的。

以上是关于登录页面使用 SSL,未加密页面看不到加密会话 cookie (Grails, Acegi)的主要内容,如果未能解决你的问题,请参考以下文章

openssl 为 STARTTLS 协商 SSL 加密

网站安装SSL证书,利用非对称加密传输会话密钥,为什么不直接使用公钥加密数据?

使用安全会话 cookie 在 HTTP 和 HTTPS 页面之间切换

Nginx-加密会话

ssl缓存是啥

加密会话(SSL)Cookie 中缺少 Secure 属性 漏洞修复