XSS, XSS DOM, XSS Reflected, XSS Stored, Безопасность | Security, Уязвимости

#8 Безопасность — Исправляем уязвимости XSS.

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

Чтобы предотвратить этот эксплойт, нужно попробовать минимизировать использование полей ввода, и каждый раз, когда что-то вводится через параметры, нужно просто минимизировать. Также нужно заменять то, что используется на данной HTML— странице. XSS может быть внедрен не только в тех местах, где текст выводится на страницу, но  он также может быть передан параметром некоторых элементов HTML-страницы. Нужно конвертировать эти символы, чтобы избежать внедрение кода.

Давайте попрактикуемся и рассмотрим наглядные примеры безопасности.

Перейдем на страничку Stored XSS, где мы увидим всплывающие окна:

Перейдем на страничку Stored XSS, где мы увидим всплывающие окна
Перейдем на страничку Stored XSS, где мы увидим всплывающие окна

Далее нужно выбрать запись в гостевой книге. У меня это «Timcore»:

Далее нужно выбрать запись в гостевой книге. У меня это «Timcore»

Рассмотрим более внимательнее этот код. Откроем тег <div>, и увидим поле «Name», и поле «Message»:

Рассмотрим более внимательнее этот код. Откроем тег <div>, и увидим поле «Name», и поле «Message»

Смысл в том, что каждый раз, при открытии этой страницы, код JavaScript выполняется раз за разом.

К слову сказать, параметр «id», в теге <div>, не отображается на странице, но хакеры могут попытаться использовать эти параметры, а также другие теги («img», «src», «url»), для проведения этой атаки.

Нам нужно фильтровать, то, что вводят пользователи, в эквивалент HTML. Если взять наглядный пример, с внедренным скриптом:

Нам нужно фильтровать, то, что вводят пользователи, в эквивалент HTML. Если взять наглядный пример, с внедренным скриптом

В итоге мы получим данный скрипт в поле «Message» на странице, без возможности выполнения.

Давайте я изменю настройки безопасности на «high», «высокие»:

Давайте я изменю настройки безопасности на «high», «высокие»

Можем перейти на страницу «Reflected XSS», разницы никакой нет, и введем наш скрипт, который мы тестировали уже:

Можем перейти на страницу «Reflected XSS», разницы никакой нет, и введем наш скрипт, который мы тестировали уже

Как видим, вывод проходит, как обычный текст, и нет исполняемого кода. Давайте посмотрим на исходники этой страницы, на наш скрипт:

Как видим, вывод проходит, как обычный текст, и нет исполняемого кода. Давайте посмотрим на исходники этой страницы, на наш скрипт

На первый взгляд кажется, что инъекция прошла успешно. На самом деле все не так, и теги экранируются в специальные символы.

Все, благодаря функции «htmlspecialchars». Посмотрим на исходники, с помощью кнопки «view sourse»:

Посмотрим на исходники, с помощью кнопки «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).

#6 Исследование уязвимости Stored XSS (Средний уровень).

#7 Исследование уязвимости DOM Based XSS.