首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘记住-我’认证功能,它总是意味着‘不安全’网站?

‘记住-我’认证功能,它总是意味着‘不安全’网站?
EN

Stack Overflow用户
提问于 2010-03-03 13:01:37
回答 6查看 4K关注 0票数 11

我正在考虑在我的webapp上实现经典的‘me me’复选框,这样一旦经过验证的用户回来访问我的网站,他就会被“记住”。

GmailFacebook和其他人都有这种特性,但我不太确定它能有多安全。

弹簧安全这样的Java使用“基于哈希的令牌方法”。生成的令牌(使用用户名、密码、expirationTime和privateKey)存储在客户端的Cookies‘token =567任何567’中。然后,该令牌将被重用,以便在用户下次回来时重新验证其身份。

我担心的是,即使登录过程是在https连接下进行的,在随后的每个http请求中,cookie都将在网络上被未加密地发送。

基本上,每个人都可以读取令牌并重用它来进行身份验证。

我想看看Gmail或Facebook是如何实现这一功能的。我能看到像‘presence=DJ267619445G09H0L15228675’这样的饼干.在FB,其他在Gmail。

我不太确定他们是否使用了其他的技巧来保护那些试图模仿其他用户的人。

我将尝试使用像cURL这样的东西来模拟自己,看看他们是否只使用特定的令牌来记住用户。

如果是的话,我认为这是一个重大的安全问题。也许不是facebook(我不在乎),但对于Gmail,如果你不设置'始终使用https‘,一个http连接将被使用,它将发送您的未加密令牌在互联网上。

你认为如何?

我还注意到,Facebook用户名/密码字段是在http (而不是https)下公开的。在这方面,我也想知道:是否所有在http上公开用户名/密码字段的网站都“本质上”不安全。一旦请求通过http发送,就不会有“重定向到https”的问题来解决“对世界可见的凭证”问题。

谢谢

编辑

我的担心是有充分根据的http://codebutler.com/

感谢火柴创建者突出这个问题!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-03 19:19:23

实现“记忆-我”并不是什么问题。您需要做的是让会话持续很长时间(并将cookie设置为持续时间长)。即使是Gmail也会在一段时间后(我想是两个星期或一个月)把你登出去。但是,您需要认识到,更长时间地打开同一个会话会增加劫持它的可能性。作为对策,您需要增加会话标识符的强度。会话标识符是cookie中的会话标识符(或者在某些软件中常见的URI中,如“file.php?PHPSESSID=1234.”)。

关键是维护一个强会话标识符。例如,在Gmail中,有一个cookie GX,其值类似于

代码语言:javascript
运行
复制
DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

会话劫持之所以不可能发生,是因为会话标识符非常强大,而且站点在任何地方都使用HTTPS。没有人能够猜测或以其他方式获取会话标识符(因此无法劫持您的会话)。快速地看一下,上面的会话标识符似乎有一些1250位的强度,1*10^376有不同的可能性。没人能猜到。

显然,总会有一些潜在的方法来继续劫持会议。例如,XSS漏洞打开了获取cookie和会话标识符的大门,但这在任何方面都不是您的会话错误,与“记住-我”无关。

我担心的是,即使登录过程是在https连接下进行的,在随后的每个http请求中,cookie都将在网络上被未加密地发送。

如果在HTTPS中将cookie安全标志设置为true,则在通过HTTP访问站点时将永远不会发送cookie。这是一个必须做的HTTPS唯一的网站。

一般来说,人们似乎只对登录页面使用HTTPS,这是错误的。如果一个人真的关心,他应该在整个页面使用HTTPS。否则,就不可能阻止所有的会话劫持尝试。

为什么许多人仍然只在登录部分使用HTTPS?可能是因为他们没有意识到关键所在,或者是因为CPU太重,无法在任何地方使用HTTPS。但是,对登录使用HTTPS仍然比在任何地方都不使用它好,因为它加密凭据(因此以后只能窃取会话标识符,而不是登录期间的实际凭据)。

也许不是facebook(我不在乎),但在Gmail中,如果你不设置‘unencrypted’,就会使用http连接,它将通过互联网发送未加密的令牌。你认为如何?

我认为如果可能的话,这个值应该默认为HTTPS。不使用HTTPS的唯一真正原因是金钱(=性能/硬件)。

票数 7
EN

Stack Overflow用户

发布于 2010-03-04 04:01:07

这通常被称为重放攻击。攻击者使用它从您那里窃取的凭据(例如cookie)重放请求,并且能够模拟您。XSS攻击只是这方面的一个变化,但是可以预防的(例如使用HTTPOnly)。

减轻大多数重播攻击的唯一方法是无处不在的https。这应该能避开大多数窥探的眼睛。

还有很多预防技术

还有一些硬件设备做得比你在软件中破解的更好,在这个过程中减慢了服务器的速度,你可能会弄错它。专用硬件可以更好地实时跟踪请求,并确定许多不同的IP都同时使用相同的令牌,而且比单个人工操作员请求的速度要快得多。

在ASP.NET 2.0+中,当使用窗体身份验证时,可以指定requireSSL='true'以指示浏览器仅在进行https连接时才发送身份验证cookie。有关保护窗体身份验证的更多信息,请参见这篇msdn文章

不允许使用remember me的唯一原因是如果您是一个银行或类似的应用程序。如果你不是,只需遵循几条简单的规则:

  1. 如果您有remember me,在未来最多30天内将cookie过期,不要滑动该值。强迫用户每月登录一次并不是很糟糕。
  2. 任何敏感操作都需要密码。在更新帐单、信用卡或帐户详细信息时,请始终重新请求用户密码。最有可能的滥用形式通常是通过与该人使用的同一台计算机进行的,但它也确保了即使是偷来的身份验证cookie本身也不会造成太大的伤害。你可以看到我的余额,但你不能转移任何东西。
票数 3
EN

Stack Overflow用户

发布于 2010-03-04 03:14:57

同意以上大多数意见。如果你担心安全问题,你应该-

( a)自始至终使用https。甚至gmail最近也默认使用https -请参阅http://gmailblog.blogspot.com/2010/01/default-https-access-for-gmail.html

( b)在会话cookie中设置安全标志,以防止浏览器通过http连接发送它。

c)修复应用程序中的XSS。如果您有xss问题,您的“记住我”的实现总是不安全的。参见OWASP预防备忘单。

在会话标识符中包括IP地址将不会有帮助。这样做会使“记住我的功能”几乎毫无用处,而且它不会增加太多的安全性。我确信google不会在其会话标识符中添加IP地址。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2371374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档