服务器端检查cookie是否被盗

时间:2013-06-21 09:54:32

标签: security cookies

有没有办法检查用户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被局域网中的另一个人偷走并使用,并且局域网没有使用任何代理而是使用NAT,并且小偷正在使用完全相同的浏览器(或欺骗用户代理),我们如何使用服务器端检测到了吗?

2 个答案:

答案 0 :(得分:4)

是的,有办法。它被称为Secure Cookie Protocol

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

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

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或用户代理从不考虑因素。除非您实际损害了客户端框,否则它使用的唯一因素是非常不容易欺骗的事情......

答案 1 :(得分:1)

如果cookie已被劫持,为时已晚。申请必须妥善保护其秘密。 useragenet是攻击者控制的,检查这个值本质上是不安全的。

OWASP - Insufficient Transport Layer Security

HTTPOnly Cookies "Secure" Cookies

防止XSS,CSRF和Clickjacking以及会话固定。