我在考虑执行经典的 '记得-我框 在我的网络应用程序允许认证的用户要记住一旦他回来看我的网站。

Gmail, Facebook 和其他人有这种功能,但我不太确定怎么安全就可以。

Java框架喜欢 弹安全 使用'基于哈希令牌的方法'.令牌产生(利用用户名、口令、expirationTime和私钥)保存客户的Cookie'token=567whatever567'.令牌然后重复使用,以重新验证用户的下一次,他回来。

我担心的事实是,即使登录过程发生在https连接,在每次随后http请求的饼干将加密的形式发送。

基本上 每个人都 可以读取令和复用它来进行认证。

我想看看如何快速Facebook正在执行这一功能。我可以看到一些饼干,如'存在=DJ267619445G09H0L15228675.....' 在FB,其他人一级。
我不太确定,如果他们用一些其他技巧,以防止有人试图去模拟一些其他的用户。

我会试着模仿使用自己喜欢的东西 卷毛 看如果他们只使用一个特定的令牌记的用户。
如果他们是它看起来对我像一个大的安全问题。也许不是facebook(我不在乎它的),但是照片,如果你不设置'总是使用https'http连接将用和它将给你的未加标记通过互联网。
你怎么想?

我也注意到,Facebook用户名/密码领域都暴露在http(不https)。在这方面,我还想知道:是的所有网站揭露的用户名/密码领域通过http不安全的'自然'.一旦请求发送通过http没有'重定向到https',可以解决的'证书可见的世界'的问题。

感谢

编辑:
我的担心是有根据的 http://codebutler.com/
感谢 的问题,地址的搜索和刷新要翻墙 创作者强调了问题!

有帮助吗?

解决方案

这不是实行记住,我这样的问题。你需要做的是保持会话存活长(和设置cookie持续很久)。即使Gmail将您注销一段时间后(我认为这是半个月或一个月)。但是,你需要认识到,保持相同的会话打开不再增加劫持到它的可能性。作为对策,你需要增加你的会话标识符的实力。会话标识符是一个是在cookie中(或在URI如在一些软件如常见的“file.php?PHPSESSID = 1234 ...”)。

的关键是保持较强的会话标识符。例如,在Gmail,则具有相似的值,以

一个cookie GX
DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

之所以会话劫持几乎是不可能的是,由于会话标识是如此强烈,因为该网站使用HTTPS无处不在。没有人能猜到或以其他方式得到你的会话标识符(因此不能劫持到会话)。在快速浏览一下,会话标识符上面似乎有实力有所〜1250位,1种* 10 ^ 376不同的可能性。没有人可以猜测。

显然,将永远仍然劫持到会议的可能方式。例如,XSS漏洞开门的方式来获得你的cookies,因此您的会话标识符,但是这不是你的会话以任何方式故障,并没有任何与“记住我”。

  

我担心的是,即使在登录过程HTTPS连接下发生的,在每一个后续的http请求的cookie将在网络上发送未加密的。

如果您设置cookie的安全标志设置为true,而在HTTPS,cookie将永远不会被访问通过HTTP网站的时候发送。这是一个必须为HTTPS的网站只有做。

在一般情况下,人们似乎只使用HTTPS的登录页面,这是不对的。如果一个人真正关心,他应该使用HTTPS遍布页面。否则,它不可能防止所有会话劫持企图。

为什么许多人仍然使用HTTPS只为登录的一部分?可能是因为他们不知道什么是在木桩,或因为它太沉重CPU到处使用HTTPS。然而,它仍然是更好地使用HTTPS日志,比没有在任何地方使用它 - 因为它加密凭证(因此只对会话标识符可以登录上时稍后被窃取,而不是实际的凭据)

  

也许不是Facebook(我不关心它),但与Gmail如果不设置“始终使用https”时的HTTP连接将被使用,它会通过互联网发送未加密令牌。   你觉得呢?

我想如果可能的值应该默认使用HTTPS在所有情况下。唯一的真正原因,为什么不使用HTTPS是钱(=性能/硬件)。

其他提示

它一般被称为重播的攻击。攻击者录像一个要求使用相同的凭据(例如cookie),它从你偷了,并能够模拟。XSS攻击仅仅是一个变化,但是可以预防的(例如使用HTTPOnly).

唯一的方法,以减轻大多数重的袭击是https无处不在。这应该保持距离的大部分窥视的眼睛。

还有 大量的预防技术 太。

也有硬件设备,做一个更好的工作比你可以破解出,在软件,减慢你的服务器过程中,你可能弄错了。专门的硬件可以做一个更好的工作的追踪请求中的实时和认定同样是正在使用的许多不同的知识产权的所有同时,快速单人操作者应当能够请求。

在ASP.NET 2.0+,当使用的形式的认证,可以指定 requireSSL='true' 以指示的浏览器应仅仅发送的认证cookie当https连接而成。看看 这msdn文章 更多信息的保护形式的认证。


唯一的理由不允许 remember me 是如果你是个银行或类似的程序。如果你不是,只是按照一些简单的规则:

  1. 如果你有 remember me, 把一个过期失效的cookie至多30天的未来并不幻灯片的价值。迫使用户登录的每月一次没那么糟
  2. 任何敏感的行动 需要 一个密码。在更新的记帐、信用卡或帐户的详细信息 总是 重新请求的用户密码。最可能的形式虐待通常是通过相同的计算机的人使用,但它还确保,即使是偷来的身份验证cookie在它自己不能做了太多伤害。你可以看到我的平衡,但是你不能转移任何东西。

同意与上述制造的大多数评论。如果你担心安全问题,你应该 -

A)使用https贯穿。即使Gmail的默认最近切换到使用HTTPS - 见 HTTP ://gmailblog.blogspot.com/2010/01/default-https-access-for-gmail.html

B)在你的会话cookie来防止浏览器通过HTTP连接发送它设置安全标志。

c)中修正XSS在应用程序中。如果你有XSS问题,你的“记住我”的实现总是会不安全。见OWASP XSS预防速查表。

在会话标识符包括IP地址是没有什么帮助。这样做会使“还记得我的功能”几乎无用的,它并不会增加太多的安全性。我知道肯定谷歌不会将IP地址在它的会话标识符。

做完全安全网站的唯一方式是启用HTTPS无处不在。你说得对,饼干可闻,后来用来冒充。

的防止会话劫持,诸如存储打开该会话的客户端的IP地址。额外的数据必须被存储在服务器侧,以验证会话,即使没有自动登录功能。这是更好地使用现时,在令牌(或至少它的基础上的非机密数据),而不是散列用户名和密码,因为攻击者可以设想发起攻击找到认证信息中给出的哈希值。

如果你看一下源为Facebook,Gmail和可能对其他网站的登录表单,登录表单操作使用HTTPS,然后重定向到一个非安全的网页,一旦登录成功。

1 /当用户勾选“记住我”:你存储有关他的电脑每一个信息的哈希值:IP,浏览器,操作系统,语言等等,你写这个哈希在他的饼干与他的ID 2 /当用户回来了,你自己计算新的哈希。你比较与接收的cookie值这个价值,并在数据库中的值(对于给定的ID)。如果他们都是平等的,你可以验证用户。

时它清除?

的Https,如果你有XSS攻击(窃取Cookie最佳方式)不能做任何事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top