2013-06-21 23 views
4

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

例如cookie的令牌/使用简单的散列函数(SHA1例如)

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,并且小偷使用的是完全相同的浏览器(或欺骗用户代理),我们在服务器端如何检测?

+1

_“并且局域网不使用任何代理,而是使用NAT,并且小偷使用的是完全相同的浏览器(或欺骗用户代理),我们如何在服务器端检测到这一点?” - - 根本不... ?要区分彼此的两件事情,你必须至少有一个关于他们每个人的信息有所不同。如果你找不到这样的信息,那么你就无法将它们分开。 – CBroe

回答

5

是的,有一种方法。它被称为Secure Cookie Protocol

您使用SSL的权利? (因为如果你不是,整个谈话都毫无意义)。

那么,你加密的cookie,但使用SSL会话标识符。假设SSL为您提供了足够的端点安全性(强密码等),SCP应该保护您的数据,并让您知道另一个SSL会话何时尝试使用同一个cookie(因为会话ID改变,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或用户代理从不因素,这种用途的东西,是非常不平凡的欺骗,除非你身体损害了客户端对话框中的唯一因素...

相关问题