#8 Безопасность — Исправляем уязвимости XSS.
Рассмотрим вопрос того, как мы можем предотвратить уязвимости XSS. Как только пользователь вводит что-либо на странице в текстовое поле или параметр. Этот текст переводится в HTML. Иными словами, он становится частью страницы, и если есть код JavaScript, то он будет выполняться.
Чтобы предотвратить этот эксплойт, нужно попробовать минимизировать использование полей ввода, и каждый раз, когда что-то вводится через параметры, нужно просто минимизировать. Также нужно заменять то, что используется на данной HTML— странице. XSS может быть внедрен не только в тех местах, где текст выводится на страницу, но он также может быть передан параметром некоторых элементов HTML-страницы. Нужно конвертировать эти символы, чтобы избежать внедрение кода.
Давайте попрактикуемся и рассмотрим наглядные примеры безопасности.
Перейдем на страничку Stored XSS, где мы увидим всплывающие окна:
![Перейдем на страничку Stored XSS, где мы увидим всплывающие окна](https://timcore.ru/wp-content/uploads/2021/07/001-1-1024x558.png)
![Перейдем на страничку Stored XSS, где мы увидим всплывающие окна](https://timcore.ru/wp-content/uploads/2021/07/002-1-1024x562.png)
Далее нужно выбрать запись в гостевой книге. У меня это «Timcore»:
![Далее нужно выбрать запись в гостевой книге. У меня это «Timcore»](https://timcore.ru/wp-content/uploads/2021/07/003-1-1024x555.png)
Рассмотрим более внимательнее этот код. Откроем тег <div>, и увидим поле «Name», и поле «Message»:
![Рассмотрим более внимательнее этот код. Откроем тег <div>, и увидим поле «Name», и поле «Message»](https://timcore.ru/wp-content/uploads/2021/07/004-1-1024x314.png)
Смысл в том, что каждый раз, при открытии этой страницы, код JavaScript выполняется раз за разом.
К слову сказать, параметр «id», в теге <div>, не отображается на странице, но хакеры могут попытаться использовать эти параметры, а также другие теги («img», «src», «url»), для проведения этой атаки.
Нам нужно фильтровать, то, что вводят пользователи, в эквивалент HTML. Если взять наглядный пример, с внедренным скриптом:
![Нам нужно фильтровать, то, что вводят пользователи, в эквивалент HTML. Если взять наглядный пример, с внедренным скриптом](https://timcore.ru/wp-content/uploads/2021/07/005-1-1024x564.png)
В итоге мы получим данный скрипт в поле «Message» на странице, без возможности выполнения.
Давайте я изменю настройки безопасности на «high», «высокие»:
![Давайте я изменю настройки безопасности на «high», «высокие»](https://timcore.ru/wp-content/uploads/2021/07/006-1-1024x561.png)
Можем перейти на страницу «Reflected XSS», разницы никакой нет, и введем наш скрипт, который мы тестировали уже:
![Можем перейти на страницу «Reflected XSS», разницы никакой нет, и введем наш скрипт, который мы тестировали уже](https://timcore.ru/wp-content/uploads/2021/07/007-1-1024x569.png)
Как видим, вывод проходит, как обычный текст, и нет исполняемого кода. Давайте посмотрим на исходники этой страницы, на наш скрипт:
![Как видим, вывод проходит, как обычный текст, и нет исполняемого кода. Давайте посмотрим на исходники этой страницы, на наш скрипт](https://timcore.ru/wp-content/uploads/2021/07/008-1-1024x557.png)
На первый взгляд кажется, что инъекция прошла успешно. На самом деле все не так, и теги экранируются в специальные символы.
Все, благодаря функции «htmlspecialchars». Посмотрим на исходники, с помощью кнопки «view sourse»:
![Посмотрим на исходники, с помощью кнопки «view sourse»](https://timcore.ru/wp-content/uploads/2021/07/009-1-1024x555.png)
Эта функция обрабатывает каждый символ, который Вы введете. Она также сообщает это 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).