【发布时间】:2011-03-28 13:29:31
【问题描述】:
据我所知,如果我不使用 SSL/HTTPS,cookie 和会话 ID 会以纯文本形式通过网络传输。附加者可以使用数据包嗅探器来获取这些信息。如何在不使用 SSL/HTTPS 的情况下保护它?我猜该解决方案将包括在客户端和服务器端都做一些事情来处理这个问题。我的服务器端是 Java。
【问题讨论】:
据我所知,如果我不使用 SSL/HTTPS,cookie 和会话 ID 会以纯文本形式通过网络传输。附加者可以使用数据包嗅探器来获取这些信息。如何在不使用 SSL/HTTPS 的情况下保护它?我猜该解决方案将包括在客户端和服务器端都做一些事情来处理这个问题。我的服务器端是 Java。
【问题讨论】:
您可以使用 Secure Cookie Protocol (PDF) 之类的东西在发送 cookie 之前对其进行加密。您可以使用请求的 IP 地址或其他 100% 特定于一般用户的标识符来代替会话标识符。
因此,要设置它,您需要创建一个服务器密钥 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 确实是秘密的)...
它包含会话标识符(SSL 是最好的,但 IP 可以提供服务)这一事实意味着它不受重放攻击或劫持攻击的影响。
SSL 是最好的,但是您可以通过使用这样的加密方案来获得一个非常好的系统。绝对最好的办法是将此方案与 SSL 相结合,这样可以防止各种恶意行为(包括 MITM 篡改,但不包括其他 MITM 攻击)...
【讨论】:
简短回答:不加密意味着未加密的数据。
更长的答案:如果您想加密您的 HTML 内容(我将 cookie 和会话 ID 包含为 HTML 内容),您必须加密您的数据。您有两个选择: HTTPS 或 b。推出自己的计划。选项 b 几乎不是一个好主意。
【讨论】: