据我所知,如果我不使用 SSL/HTTPS,cookie 和 session ID 将以纯文本形式通过网络传输。附加人员可以使用数据包嗅探器来获取这些信息。我如何在不使用 SSL/HTTPS 的情况下保护它?我猜测解决方案包括在客户端和服务器端做一些事情来解决这个问题。我的服务器端是 Java。
您可以使用类似 Secure Cookie Protocol (PDF) 的东西在发送 cookie 之前对其进行加密。您可以使用请求的 IP 地址或其他 100% 特定于一般用户的标识符,而不是 session 标识符。
因此,要进行设置,您需要创建一个服务器 key k
。然后,您将按如下方式创建 cookie:
keyhmac = HMAC(user name + expiration time, k)
encrypted = ENCRYPT(data, keyhmac)
hmacenc = HMAC(user name + expiration time + data + session identifier, keyhmac)
cookie = user name + expiration time + encrypted + hmacenc;
然后,您可以稍后使用相反的过程对其进行解密。 HMAC 验证它没有在您的服务器外部被篡改(假设 k
确实是 secret 的)...
它包含一个 session 标识符(SSL 是最好的,但 IP 也可以提供服务)这一事实意味着它可以免受重放攻击或劫持攻击。
SSL 是最好的,但是您可以通过使用像这样的加密方案来获得一个相当不错的系统。绝对最好的办法是将此方案与 SSL 相结合,这样可以防止各种恶意行为(包括 MITM 篡改,但不包括其他 MITM 攻击)...
我是一名优秀的程序员,十分优秀!