有没有办法检查用户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,并且小偷正在使用完全相同的浏览器(或欺骗用户代理),我们如何使用服务器端检测到了吗?
答案 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以及会话固定。