Каков наилучший способ обезопасить корзину покупок на веб-сайте JAVA / Tomcat? - PullRequest
0 голосов
/ 28 августа 2009

Я ищу наилучшее решение в отношении того, как обезопасить «корзину для покупок» в части (относительно) небезопасного веб-сайта.

Существующая установка на сайте использует незащищенный cookie-файл и только защищает (через SSL) транзакцию учетных данных. Доступ к остальной части сайта осуществляется через HTTP, поэтому данные передаются небезопасно. Для нас это не проблема.

Однако теперь мы добавляем элемент «shopping-cart-esque» на сайт и хотим обезопасить процесс оформления заказа. Моя идея до сих пор была:

  1. Чтобы использовать безопасный cookie-файл (который будет содержать в качестве значения длинную случайную строку в кодировке Base64) с истечением 15 минут.
  2. То же значение (и метка времени создания) будет сохранено в СЕССИИ (конечно, на стороне сервера!). Примечание. Я говорю об очередном небезопасном сеансе.
  3. Файл cookie будет отправлен пользователю только в том случае, если он сам подтвердит свою подлинность. Если он уже вошел в систему - ему, таким образом, придется «повторно пройти аутентификацию» (если только он не имеет действующего 15-минутного безопасного cookie) и предоставить нам свой пароль еще раз.
  4. По сути, я думаю, это не слишком отличается от обычной 15-минутной безопасной "сессии кота". И учетные данные, и данные в этом сеансе передаются по протоколу HTTPS / SSL.

Примечания и мысли:

  • Для проверки защищенного cookie временная метка и маркерный ключ будут храниться в обычном (незащищенном) объекте сеанса на сервере. НО - поскольку безопасный токен передается только по протоколу SSL, у человека-посредника нет возможности перехватить его. Следовательно, даже если злоумышленнику удастся украсть обычный идентификатор сеанса и подделать личность пользователя - , ему все равно потребуется знать специальный токен безопасности , связанный с (обычным) сеансом этого пользователя. чтобы получить доступ к данным своей кредитной карты.
  • 15-минутный срок действия файлов cookie будет применяться как на стороне клиента, так и на стороне сервера (при сохранении метки времени создания).
  • Сам файл cookie (и безопасный токен) не содержат никакой конфиденциальной (зашифрованной или иной) информации. Ключ - просто длинная случайная строка.
  • Чтобы сгенерировать токен, который я задумал использовать java SecureRandom, и кодировать в Base64 случайные байты, сгенерированные им, чтобы он содержал только буквенно-цифровые символы, слэш и плюсы. Я думал об использовании 512 случайных байтов, но если бы это можно было сделать с меньшими затратами, я был бы рад услышать :) 1030 *

Это считается хорошим решением? Есть ли лучшая практика, которая может быть применена в этом случае? Есть ли что-нибудь, что можно сделать, чтобы еще больше повысить безопасность, не «переусердствовав»?

Заранее спасибо! Том

1 Ответ

0 голосов
/ 31 августа 2009

Я бы порекомендовал реализовать защиту J2EE. У вас не должно возникнуть проблем с использованием Struts.

См. Руководство по безопасности Oracle

Поскольку вы используете файлы cookie, вы заставляете клиента включить файлы cookie в своем браузере.

Вы можете, скорее, заставить пользователя войти в систему, используя (безопасность J2EE), когда он хочет использовать корзину, а затем сохранить только идентификатор JSESSION (контейнер по умолчанию) в клиентском браузере (пользователю не нужно проходить аутентификацию для создать сеанс).

Если вы предоставите тайм-аут сеанса 30 минут и сохраните всю информацию о клиенте в сеансе, она будет храниться на сервере и удаляться в случае исчезновения клиента.

Можно отключить Cookies в браузере, но сервер может распознавать клиента. См. J2EE Spec

...