#8 Безопасность — Исправляем уязвимости XSS.
Рассмотрим вопрос того, как мы можем предотвратить уязвимости XSS. Как только пользователь вводит что-либо на странице в текстовое поле или параметр. Этот текст переводится в HTML. Иными словами, он становится частью страницы, и если есть код JavaScript, то он будет выполняться.
Чтобы предотвратить этот эксплойт, нужно попробовать минимизировать использование полей ввода, и каждый раз, когда что-то вводится через параметры, нужно просто минимизировать. Также нужно заменять то, что используется на данной HTML— странице. XSS может быть внедрен не только в тех местах, где текст выводится на страницу, но он также может быть передан параметром некоторых элементов HTML-страницы. Нужно конвертировать эти символы, чтобы избежать внедрение кода.
Давайте попрактикуемся и рассмотрим наглядные примеры безопасности.
Перейдем на страничку Stored XSS, где мы увидим всплывающие окна:
Далее нужно выбрать запись в гостевой книге. У меня это «Timcore»:
Рассмотрим более внимательнее этот код. Откроем тег <div>, и увидим поле «Name», и поле «Message»:
Смысл в том, что каждый раз, при открытии этой страницы, код JavaScript выполняется раз за разом.
К слову сказать, параметр «id», в теге <div>, не отображается на странице, но хакеры могут попытаться использовать эти параметры, а также другие теги («img», «src», «url»), для проведения этой атаки.
Нам нужно фильтровать, то, что вводят пользователи, в эквивалент HTML. Если взять наглядный пример, с внедренным скриптом:
В итоге мы получим данный скрипт в поле «Message» на странице, без возможности выполнения.
Давайте я изменю настройки безопасности на «high», «высокие»:
Можем перейти на страницу «Reflected XSS», разницы никакой нет, и введем наш скрипт, который мы тестировали уже:
Как видим, вывод проходит, как обычный текст, и нет исполняемого кода. Давайте посмотрим на исходники этой страницы, на наш скрипт:
На первый взгляд кажется, что инъекция прошла успешно. На самом деле все не так, и теги экранируются в специальные символы.
Все, благодаря функции «htmlspecialchars». Посмотрим на исходники, с помощью кнопки «view sourse»:
Эта функция обрабатывает каждый символ, который Вы введете. Она также сообщает это HTML, и браузеру, что изменит их на эквивалентные символы в коде HTML.
На самом деле, не важно какую инъекцию Вы пытаетесь сделать, так как будет проходить процесс конвертации.
Если Вы обычный пользователь, то в данном случае URL будет выглядеть, как обычный и доверенный. В данной ситуации, я рекомендую быть осторожным при переходе по ссылкам, и получения каких-либо не рекомендуемых формах (всплывающие окна).
Если Вы скачиваете что-то, то постарайтесь обратить внимание на то, чтобы был официальный сайт, и HTTPS. Всегда сверяйте контрольные суммы софта, чтобы избежать возможность подлога.
Если Вы получили фейковое уведомление о вводе логина и пароля (на примере Facebook), то игнорируйте его.
На этом все. Всем хорошего дня!
#1 Что такое уязвимость XSS (Cross Site Scripting)? Типы XSS.
#2 Исследование Reflected XSS (уровень Low).
#3 Исследование Reflected XSS — Средний уровень.
#4 Исследование Reflected XSS — (Сложный уровень).
#5 Исследование уязвимости Stored XSS. (Уровень Low).