我注意到某些网站(例如 gmail)允许用户通过 https 进行身份验证,然后切换到带有非安全 cookie 的 http 以用于该网站的主要用途。
怎么可能对会话进行 http 访问,但这仍然是安全的?还是它不安全,因此这就是为什么 gmail 提供了使用 https 保护整个会话的选项?
请举例说明其工作原理并避免会话劫持攻击,同时仍允许通过 http 访问经过身份验证的内容。如果它是安全的,我希望能够实施这样的方案,以避免出于性能原因必须将整个站点设置为 https。
我注意到某些网站(例如 gmail)允许用户通过 https 进行身份验证,然后切换到带有非安全 cookie 的 http 以用于该网站的主要用途。
怎么可能对会话进行 http 访问,但这仍然是安全的?还是它不安全,因此这就是为什么 gmail 提供了使用 https 保护整个会话的选项?
请举例说明其工作原理并避免会话劫持攻击,同时仍允许通过 http 访问经过身份验证的内容。如果它是安全的,我希望能够实施这样的方案,以避免出于性能原因必须将整个站点设置为 https。
只有在密码不以明文形式传输的情况下,它才是安全的。在 HTTP 模式下拦截和滥用 GMail 会话 cookie 是可能的(并且已经完成)。
为避免会话劫持,您需要保持 HTTPS 模式(我认为是 GMail 现在提供的)。
正如蒂洛所说,但我会进一步解释:)
网络服务器是无状态的!这确实是身份验证案例的问题。您不能只是登录,然后说“从现在开始,此用户已登录” - 您需要某种方式来确定这次请求新站点的用户是哪个用户。
一种常见的方法是实现会话。如果您在登录时对网络流量进行数据包嗅探,然后浏览网站,您通常会注意到以下内容:
登录:您将把您的用户名和密码传送到服务器。完全未加密!(SSL / HTTPS 将为您加密此请求以避免中间人攻击)
响应:您将收到一个随机生成的包含许多奇怪字符的字符串。这些通常会存储在 cookie 中。
只有您应该有权访问的某些站点的请求:您将随机生成的字符串传输到服务器。服务器将查找此字符串,并查看它是否与您的会话相关联。这允许服务器识别您,并授予您访问您的站点的权限。
.. 现在,HTTP 本身并不安全。这意味着您的密码和会话 cookie(随机生成的字符串)将完全不加密地传输。如果有人可以访问您的流量(通过木马、路由器劫持等),如果您不使用 HTTPS,他将能够在您登录时看到您的用户名/密码。这将授予他访问您网站的权限,直到您更改密码(除非他先更改密码:P)。在其余的请求中,他将能够获取您的会话 cookie,这意味着他可以在该 cookie 生命周期的剩余时间里窃取您的身份(直到您注销,或者服务器上的会话到期)。
如果您想感到安全,请使用 HTTPS。但实际上,将键盘记录器社会工程到您的计算机中比读取所有流量要容易得多:)
(或者正如其他人指出的那样,使用跨站点脚本来读取您的会话 cookie)
这比纯 HTTP 稍微安全一点——登录名/密码不会以纯文本形式传输。除此之外,它的工作方式与普通的基于 HTTP cookie 的会话完全一样(因为它就是这样);因此,所有会话劫持问题都适用。
这不是真的可能而且不安全。这就是我们得到“安全cookies”的原因。虽然它可以很好地抵御被动嗅探攻击,因为用户名/密码不会被暴露,但是会话劫持仍然是可能的。
另请查看此SSL 实施安全常见问题解答文件。