如何在不使用SSL / HTTPS的情况下保护会话ID和cookie?

时间:2011-03-28 13:29:31

标签: security ssl https

据我了解,如果我不使用SSL / HTTPS,则Cookie和会话ID将通过网络以纯文本形式传输。一个传感器可以使用数据包嗅探器来获取这些信息。如何在不使用SSL / HTTPS的情况下保护它?我猜这个解决方案包括在客户端和服务器端做一些事情来处理这个问题。我的服务器端是Java。

2 个答案:

答案 0 :(得分:8)

您可以使用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相结合,然后SSL可以防止各种恶意(包括MITM篡改,但不会阻止其他MITM攻击)......

答案 1 :(得分:4)

简答:没有加密意味着未加密的数据。

更长的答案:如果您想加密HTML内容(我将Cookie和会话ID包含为HTML内容),您必须加密数据。您有两种选择:a。 HTTPS或b。滚动你自己的计划。选项b几乎不是一个好主意。