4

有没有办法检查用户 A 的 cookie 是否在服务器端被用户 B 窃取?

例如使用简单哈希函数(例如 sha1)创建的 cookie 令牌/数据

hash_of(user_agent,ip+proxy_ip,username,random_session_key)

where user_agent is browser's user agent, 
  ip is the client IP address, 
  proxy_ip is the proxy's IP address the client use, 
  username is the username the user currently login, 
  random_session_key is a random number saved to database when a user logged in

如果该 cookie 被 LAN 上的另一个人窃取并使用,并且 LAN 没有使用任何代理,而是使用 NAT,并且小偷使用完全相同的浏览器(或欺骗用户代理),我们在服务器端如何检测那?

4

2 回答 2

4

是的,有办法。它被称为安全 Cookie 协议

您正在使用 SSL 对吗?(因为如果你不是,这整个谈话是毫无意义的)。

好吧,您加密 cookie,但使用 SSL 会话标识符。假设 SSL 为您提供了足够的端点安全性(强密码等),SCP 应该保护您的数据并允许您判断另一个 SSL 会话何时尝试使用相同的 cookie(因为 sessionid 更改,因此 MAC 将更改)。

key = HMAC(user name|expiration time, secret_key)
cookie = user name|expiration time|encrypt(data, key)
cookie = cookie | HMAC( user name|expiration time|data|sessionid, key)

所以基本上,您正在创建一个基于 SSL 会话标识符的唯一验证码。

请注意,REMOTE_ADDR 或用户代理永远不会考虑在内。此使用的唯一因素是非常不容易进行欺骗的东西,除非您在物理上破坏了客户端框......

于 2013-06-21T11:23:34.820 回答
1

如果 cookie 被劫持了, 那就太迟了。应用程序必须适当地保护其秘密。useragenet 是攻击者控制的,检查这个值本质上是不安全的。

OWASP - 传输层安全性不足

HTTPOnly Cookies “安全” Cookies

防止 XSS、CSRF、点击劫持和会话固定。

于 2013-06-22T00:12:00.970 回答