Как защитить идентификатор сессии и куки без использования SSL / HTTPS? - PullRequest
3 голосов
/ 28 марта 2011

Насколько я понимаю, если я не использую SSL / HTTPS, файлы cookie и идентификаторы сеансов передаются в виде простого текста по проводам.Атакующий может использовать анализатор пакетов, чтобы получить на них руку.Как я могу защитить это без использования SSL / HTTPS?Я предполагаю, что решение состоит в том, чтобы сделать что-то на стороне клиента и на стороне сервера, чтобы позаботиться об этом.Моя серверная часть - Java.

Ответы [ 2 ]

8 голосов
/ 28 марта 2011

Вы можете использовать что-то вроде 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) ...

4 голосов
/ 28 марта 2011

Краткий ответ: отсутствие шифрования означает незашифрованные данные.

Более длинный ответ: Если вы хотите зашифровать свои HTML-данные (а я включаю файлы cookie и идентификатор сеанса в качестве HTML-содержимого), они должны зашифровать ваши данные.У вас есть два варианта:HTTPS или б.сверните свою собственную схему.Вариант b почти никогда не является хорошей идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...