Как вы можете предотвратить XSS, который отправляется как часть поля URL - PullRequest
1 голос
/ 24 сентября 2019

В настоящее время я отображаю ссылку на определенную веб-страницу с URL-адресом, заданным пользователем посредством запроса POST.Веб-сайт показывается второму пользователю (пользователю 2), который отображает эту ссылку.Если щелкнуть ссылку, она вернется на веб-страницу пользователя 1 (или она должна быть такой).Но это недавно появилось, когда, если URL-адрес изменен или если пользователь 1 является плохим пользователем, он устанавливает URL-адрес как Javascript://%0Aalert(document.domain)//, при щелчке по ссылке он выполняет сценарий.

Как этот URL может быть проверен в Java и не дать пользователю 1 установить его в качестве URI вместо правильного при поступлении запроса POST?

1 Ответ

1 голос
/ 24 сентября 2019

Есть (как минимум) два способа решения этой проблемы, которые вы можете использовать вместе или по отдельности:

  1. Анализировать полученный URL и проверить, что все его составные части (схема, имя хоста, порт, путь, строка запроса и т. д.) содержат разумные значения, которые ваше приложение обычно генерирует и которые, как вы полагаете, безвредны.

    В частности, просто проверяйте, что схема http и /или https было бы достаточно, чтобы остановить конкретную атаку, упомянутую в вашем вопросе, хотя вам почти наверняка следует выполнить больше проверки, чем просто.

  2. При первоначальном создании URL-адреса рассчитайтекриптографический код аутентификации сообщения (используя секретный ключ, хранящийся на вашем сервере и никогда не отправляемый клиенту) и отправьте его вместе с URL-адресом.Когда вы получите URL-адрес от клиента, убедитесь, что MAC-адрес все еще совпадает.

    Это общий метод обеспечения того, чтобы значения, которые должны , были переданы клиентом обратно без изменений.сервер не подделан.Если у вас есть несколько таких значений, а не только один URL, вы можете закодировать их все в одну строку и рассчитать один MAC для всех них.Просто убедитесь, что кодировка является детерминированной, чтобы вы могли точно повторить ее при проверке MAC.Кроме того, вы можете захотеть объединить дополнительные метаданные, такие как идентификатор пользователя и / или временную метку, во вход MAC, чтобы защитить от атак воспроизведения .

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