У меня есть веб-сайт, размещенный на сервере Apache Tomcat 7, который использует шлюз Authorize.net и торговые сервисы для обработки платежей. Недавно я провел на своем веб-сайте обязательный тест на соответствие PCI, и он не прошел из-за уязвимости Reflected Cross-Site Scripting (XSS). В качестве примера они привели замену значения одного из моих параметров формы скриптом: предупреждение ('тест')
Мне кажется, что я уже решил эту проблему на стороне клиента, проверяя входные данные при отправке формы и не продолжая, если один из входных данных недействителен. Однако повторное сканирование недавно не удалось, поэтому я думаю, что мне нужно сделать больше.
Мой первый вопрос: Можно ли передать параметры POST на сервер через URL-адрес? Я думал, что это возможно только с помощью метода GET, который я не использую. Я пытаюсь понять, как они отправляют эти данные. Их поддержки, конечно, нет, так что я должен разобраться в проблеме самостоятельно.
У кого-нибудь был опыт работы с PCI RapidComply? Что вы использовали для устранения проблем с проверкой XSS?
Спасибо!
Вы не можете передавать параметры POST через URL-адрес, но это не требуется для XSS-уязвимости. Сторонний сайт может отправить пользователя на ваш сайт с любым параметром POST, который они хотят, используя JavaScript:
<html>
<body onload="document.forms[0].submit()">
<form action="https://yoursite.example.com/" method="post">
<input type="hidden" name="parameter" value="alert('test')">
</form>
</body>
</html>
Пока злоумышленник может заставить конечного пользователя, имеющего доступ к вашему сайту, загрузить такой HTML-документ (например, через iframe, размещенный в рекламной сети), он может заставить пользователя запустить произвольный JavaScript на вашей странице в контексте (сеанс ) этого пользователя.
Единственный способ предотвратить это - обработать его на стороне сервера. В общем, любые отправленные пользовательские данные должны быть очищены, а также не забывать избегать всего при выводе HTML. Обычно последняя часть обрабатывается библиотекой шаблонов.