Проверка вводимых пользователем данных
Наиболее часто встречающимся недостатком сценариев, используемых для генерирования динамического содержимого, является обработка вводимых пользователем данных (например, данных формы) без их проверки. При вводе некорректных данных хакерам, их отправившим, открывается возможность для выполнения ряда атак. Любой сайт, осуществляющий прием данных от пользователя, подвержен атакам, если получаемые данные не проверяются перед их обработкой.
В языке HTML для отличия текста от тегов разметки используются некоторые символы. Например, символ "меньше чем" ("<") означает начало тега HTML. Когда веб-браузер считывает символ "<", он осуществляет поиск корректного тега HTML, располагающегося после этого символа. Если на странице HTML требуется отобразить сам символ "<", разработчику нужно заменить "<" на <.
Теги могут либо управлять форматом содержимого страницы, либо представлять программу для выполнения (например, тег <SCRIPT> представляет код различных языков сценариев). Хакер может вставить в поле формы вредоносный код вместо ожидаемого содержимого. Например, вместо указания адреса электронной почты в гостевой книге веб-сайта ввести следующий код:
<A HREF=http://www.плохой_сервер.com/scripts/вредоносный.asp>Щелкните здесь – специальное предложение</A>.
Если код не будет проверен, то сценарий возвратит эти данные каждому пользователю, просматривающему комментарии посетителей в гостевой книге, и отобразит гиперссылку: "Щелкните здесь – специальное предложение". Пользователь, щелкнувший на этой ссылке, перенаправится на сайт www.плохой_сервер.com. Все будет выглядеть так, будто вредоносный код поступил с вашего сайта. При отправке и отображении вредоносного сценария (так называемая "подстановка сценариев") хакер потенциально может захватить управление сайтом.
Непроверенные введенные данные могут вызывать, например, нарушение целостности данных, установку и считывание элементов cookie и перехват вводимых пользователем данных. Принимая во внимание огромное количество пробелов в безопасности, создаваемых непроверенными данными на общем веб-сервере, удивительно, что на большинстве сайтов до сих пор отсутствует проверка данных перед их обработкой. Если ваши сценарии принимают данные от пользователей интернета, обеспечьте их проверку, кодирование и фильтрацию символов со специальным значением, чтобы они не воспринимались как код HTML.