Запретить изменение формы HTML - PullRequest
8 голосов
/ 19 сентября 2011

На моей странице есть форма, где пользователи вводят данные своей кредитной карты. Можно ли в HTML помечать действие формы как постоянное, чтобы не дать вредоносному JavaScript изменить свойство действия формы? Я могу представить себе атаку XSS, которая изменяет URL-адрес формы, заставляя пользователей размещать свои секретные данные на сайте злоумышленника.

Возможно ли это? Или в веб-браузерах есть другая функция, которая предотвращает подобные атаки?

Ответы [ 3 ]

5 голосов
/ 19 сентября 2011

Этот тип атаки возможен, но это неправильный способ предотвратить его.Если хакер может изменить данные формы, он может также легко отправить секретные данные через AJAX GET, не отправляя форму вообще.Правильный способ предотвратить атаку XSS - это обязательно кодировать весь ненадежный контент на странице так, чтобы хакер не имел возможности выполнить свой собственный JavaScript в первую очередь.Подробнее о кодировании ...

Пример кода в StackOverflow является отличным примером кодирования.Представьте, какой будет беспорядок, если каждый раз, когда кто-то публикует какой-то пример JavaScript, он фактически выполняется в браузере.Например,

<script type="text/javascript">alert('foo');</script>

Если бы не тот факт, что SO закодировал вышеуказанный фрагмент, вы бы просто увидели окно с предупреждением.Это, конечно, довольно безобидный сценарий - я мог бы написать код JavaScript, который захватил ваш сессионный cookie и отправил его на evil.com/hacked-sessions.К счастью, однако, SO не предполагает, что у всех благие намерения, и фактически кодирует контент.Например, если бы вы просмотрели исходный код, вы бы увидели, что SO закодировал мои совершенно корректные HTML и JavaScript в это:

&lt;script type="text/javascript"&gt;alert('foo');&lt;/script&gt;

Таким образом, вместо встраивания фактических <и > символов, где я их использовал, они были заменены их эквивалентами в кодировке HTML (&lt; и &gt;), что означает, что мой код больше не представляет тег сценария.

В любом случае,это общая идея кодирования.Для получения дополнительной информации о как вы должны кодировать, это зависит от того, что вы используете на стороне сервера, но большинство всех веб-платформ включают в себя своего рода «готовую» утилиту кодирования HTML.Вы несете ответственность за обеспечение того, чтобы предоставляемый пользователем (или иным образом ненадежный) контент ВСЕГДА кодировался перед его обработкой.

1 голос
/ 07 ноября 2018

Есть ли другая функция в веб-браузерах, которая предотвращает подобные атаки?

С тех пор ваша проблема была решена в новых выпусках браузера с помощью нового Content-Security-Policy заголовка.

Настроив script-src , вы можете полностью запретить встроенный JavaScript. Обратите внимание, что эта защита не обязательно распространяется на пользователей в старых браузерах (см. CanIUse ).

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

0 голосов
/ 19 сентября 2011

Нет, ничего, чтобы действительно предотвратить это.

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

Как говорится: Никогда не доверяй пользователю

...