Security 是否有防止cookies被盗的方法?

Security 是否有防止cookies被盗的方法?,security,authentication,cookies,Security,Authentication,Cookies,在Web 2.0应用程序中,许多用户通常希望保持登录状态(“记住我”标志),另一方面,他们的cookie可以访问非常私有的数据。有没有办法防止直接从计算机或通过嗅探窃取cookie的人可以使用cookie访问用户的数据?HTTPS始终不是一个选项 谢谢你,伯纳德 [编辑]将IP地址连接到cookie也不是一个选项。将一个不明ID的cookie存储到本地服务器数据库中。根据cookie中提供的ID执行服务器端数据库查找。确保ID足够复杂,不容易猜到。将ID映射到用户的IP地址。如果他们的IP发生变

在Web 2.0应用程序中,许多用户通常希望保持登录状态(“记住我”标志),另一方面,他们的cookie可以访问非常私有的数据。有没有办法防止直接从计算机或通过嗅探窃取cookie的人可以使用cookie访问用户的数据?HTTPS始终不是一个选项

谢谢你,伯纳德


[编辑]将IP地址连接到cookie也不是一个选项。

将一个不明ID的cookie存储到本地服务器数据库中。根据cookie中提供的ID执行服务器端数据库查找。确保ID足够复杂,不容易猜到。将ID映射到用户的IP地址。如果他们的IP发生变化,则强制他们再次登录,并创建一个新ID

在第二次阅读时,听起来好像你想要一个高水平的安全与你的双手绑。用户必须选择保持登录状态,从而增加其风险。从应用程序和服务器的角度来看,您可以实现世界上所有的安全性,但是如果用户忘记将笔记本电脑放在Tim Horton's(加拿大星巴克)的桌子上,那么这些都不会对您有任何好处


让用户自行选择是否继续登录,并警告他们信息存在风险。

盖上饼干罐

撇开玩笑不谈,最好的选择已经陈述了——将cookie设为一个模糊的ID,并将其绑定到服务器端的IP地址查找。由于您编辑后表示无法将其绑定到IP地址,因此留下了模糊的ID部分。Cookie限制了您的选择—您在客户端放置内容的那一刻,它就成为了一种风险。

Bernd—通过标准HTTP执行任何操作的问题在于它是纯文本的;任何人都可以伪造任何东西。IP欺骗比普通的cookie窃取更具挑战性,因此绑定到IP往往是人们所做的事情。正如您所说,这在高度动态的环境中不太适用

我能想到的唯一最安全的方法是使用HTTPS放置和验证“永久”cookie,然后(在同一HTTPS会话中)放置一个短期会话cookie。其余的通信可以通过常规HTTP完成,使用会话cookie进行身份验证

这样一来,支持加密的资源就更少了(只是握手),永久cookie不会公开——它只在加密的情况下传输——而窃取会话cookie只会带来有限的风险,因为cookie很快就会过期

尽管如此,不要让用户在包含真正敏感数据的网站上点击“记住我”!这就是为什么银行不这么做


希望这能有所帮助。

关于在数据库中存储复杂的cookie ID和关联的IP,您实际上不必这样做。如果您有一个密钥K,就可以用K加密用户的ip,并将结果{ip}K作为cookie。只要你的密钥是安全的(密码没有被破坏——但如果发生这种情况,我们就有更大的问题),这是安全的。

Bernd-你说将IP地址连接到cookie不是一个选项,我假设这是b/c,用户可以通过DHCP连接,因此每次都可以使用不同的IP。您是否考虑过将cookie绑定到DNS主机名?您可以使用私钥加密cookie,并将其存储在用户的邮箱中。然后,每当他们进来时,检查cookie,取消加密,然后对照cookie中的DNS主机名检查用户的当前DNS主机名。如果匹配,则允许他们进入。如果不允许,则不允许自动登录

仅供参考-在ASP.Net中,要获取用户框的DNS主机名,只需查看

Page.Request.UserHostName
KISS——只需使用会话,就可以使用已经由您选择的服务器端脚本语言自动创建的ID。这很难猜测。然后,如果被窃取,则将访问者的IP地址和用户代理存储在会话中(确保永远不输出),并且只考虑会话有效<强>仅当< /强>已经存储的IP地址和用户代理与远程客户端找到的匹配。p> 在这种情况下,攻击者必须执行以下三项操作:

  • 偷受害者的饼干
  • 欺骗正确的IP地址
  • 欺骗正确的用户代理

  • 它还有助于确保攻击者不知道为了正确接管受害者会话他/她必须做的所有事情。IE:他们可能会假设只需要cookie,然后失败。。。还要通过长期的尝试和错误来解决其他问题。通过这种方式,您可以通过隐蔽性和困难性获得安全性,这取决于攻击者的技能和他/她对系统的现有知识。

    也许使用会话ID和令牌(基于IP、salt和会话ID的哈希)是一种好方法,它会在每个请求中重新生成(使用快速哈希算法)?我(目前)将会话数据存储在数据库中,这意味着每个请求都有两个查询开销。它的工作原理如下:

  • 选择SID和TOK匹配的位置
  • 验证基于当前客户端生成的令牌是否与数据库中的令牌匹配
  • 将数据反序列化为属性
  • 脚本等正在发生
  • 序列化更新数据,重新生成SID/TOK,并更新数据库,其中SID/TOK=旧SID和TOK,更新数据和新SID和TOK。将cookie设置为新的SID和TOK
  • 通过这种方式,首先cookie被绑定到令牌所基于的任何东西(在本例中,是远程地址),如果该令牌被盗并且客户端数据被伪造,那么cookie只对一个请求有用——在拦截cookie时,它是无用的

    我能看到的唯一可察觉的弱点是攻击者是否设法抓取了一块饼干、恶作剧和其他东西