Какой лучший способ защитить строку запроса с помощью Java? - PullRequest
2 голосов
/ 04 марта 2009

Когда пользователь регистрируется в нашем приложении Struts, мы хотим отправить ему электронное письмо со ссылкой на другую страницу. Ссылка должна содержать уникальный идентификатор в строке запроса, чтобы целевая страница могла идентифицировать пользователя и реагировать соответствующим образом.

Чтобы повысить безопасность этой системы, я хотел бы сначала зашифровать строку запроса, содержащую идентификатор, а затем установить ссылку на время истечения - после ее использования и / или через несколько дней.

Какие технологии / методы Java вы бы предложили мне использовать для этого?

Ответы [ 3 ]

4 голосов
/ 04 марта 2009

Я собираюсь сделать некоторые предположения о вашей озабоченности:

  1. Пользователь не должен угадывать URL другого пользователя.
  2. После использования URL не должен использоваться повторно (избегая атак воспроизведения сеанса).
  3. Используемый или нет, URL-адрес не должен существовать вечно, что позволяет избежать перебора.

Вот как бы я это сделал.

  • Хранить идентификатор пользователя и метку времени истечения в таблице.
  • Объедините их в строку, затем сделайте из нее хеш-код SHA-1.
  • Создание URL-адреса с использованием хеш-значения SHA-1. Сопоставьте все такие URL с сервлетом, который будет выполнять проверку.
  • Когда кто-то отправляет вам запрос на страницу с хэшем, используйте его для поиска пользователя и срока его действия.
  • После того, как пользователь сделал то, что должна сделать целевая страница, пометьте строку в базе данных как «использованную».
  • Ежедневно запускайте задание для очистки строк, которые либо используются, либо истек срок их действия.
2 голосов
/ 04 марта 2009

Для первой части взгляните на Создание частных, уникальных, защищенных URL-адресов . По истечении срока действия вам просто нужно сохранить уникальную временную метку создания ключа в базе данных и разрешить выполнение вашего действия только тогда, когда now-keyCreatedAt <3 дня. Другой способ заключается в том, чтобы задание cron или <a href="http://www.quartz-scheduler.org/" rel="nofollow noreferrer"> Quartz периодически удаляло те строки, которые имеют значение true для "now-keyCreatedAt <3 days". </p>

0 голосов
/ 05 марта 2009

Я думаю, что вы можете сделать это без сохранения состояния, то есть без таблицы базы данных, которую предлагают другие.

  • Как предполагает mtnygard, создайте хэш SHA-1 для параметров URL и секретной строки соли.
  • Добавьте значение хеша в качестве обязательного параметра в URL.
  • Отправьте URL в письме.

Когда пользователь нажимает на URL:

  • Проверьте целостность URL-адреса, снова рассчитав хэш и сравнив вычисленное значение с значением в URL.

Пока вы никогда не разглашаете свою секретную строку соли, никто не сможет подделать запросы к системе. Однако, в отличие от других предложений, это не мешает воспроизвести старый URL. Это может или не может быть желательным, в зависимости от вашей ситуации.

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