Этот тип атаки возможен, но это неправильный способ предотвратить его.Если хакер может изменить данные формы, он может также легко отправить секретные данные через AJAX GET
, не отправляя форму вообще.Правильный способ предотвратить атаку XSS - это обязательно кодировать весь ненадежный контент на странице так, чтобы хакер не имел возможности выполнить свой собственный JavaScript в первую очередь.Подробнее о кодировании ...
Пример кода в StackOverflow является отличным примером кодирования.Представьте, какой будет беспорядок, если каждый раз, когда кто-то публикует какой-то пример JavaScript, он фактически выполняется в браузере.Например,
<script type="text/javascript">alert('foo');</script>
Если бы не тот факт, что SO закодировал вышеуказанный фрагмент, вы бы просто увидели окно с предупреждением.Это, конечно, довольно безобидный сценарий - я мог бы написать код JavaScript, который захватил ваш сессионный cookie и отправил его на evil.com/hacked-sessions.К счастью, однако, SO не предполагает, что у всех благие намерения, и фактически кодирует контент.Например, если бы вы просмотрели исходный код, вы бы увидели, что SO закодировал мои совершенно корректные HTML и JavaScript в это:
<script type="text/javascript">alert('foo');</script>
Таким образом, вместо встраивания фактических <
и >
символов, где я их использовал, они были заменены их эквивалентами в кодировке HTML (<
и >
), что означает, что мой код больше не представляет тег сценария.
В любом случае,это общая идея кодирования.Для получения дополнительной информации о как вы должны кодировать, это зависит от того, что вы используете на стороне сервера, но большинство всех веб-платформ включают в себя своего рода «готовую» утилиту кодирования HTML.Вы несете ответственность за обеспечение того, чтобы предоставляемый пользователем (или иным образом ненадежный) контент ВСЕГДА кодировался перед его обработкой.