Найти тему

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

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

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

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

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

-2
-3

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

-4

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

-5

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

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

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

-6

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

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

-7

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

-8

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

Давайте посмотрим на исходники этой страницы, на наш скрипт:

-9

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

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

-10

Эта функция обрабатывает каждый символ, который Вы введете. Она также сообщает это HTML, и браузеру, что изменит их на эквивалентные символы в коде HTML.

На самом деле, не важно какую инъекцию Вы пытаетесь сделать, так как будет проходить процесс конвертации.

Если Вы обычный пользователь, то в данном случае URL будет выглядеть, как обычный и доверенный. В данной ситуации, я рекомендую быть осторожным при переходе по ссылкам, и получения каких-либо не рекомендуемых формах (всплывающие окна).

Если Вы скачиваете что-то, то постарайтесь обратить внимание на то, чтобы был официальный сайт, и HTTPS. Всегда сверяйте контрольные суммы софта, чтобы избежать возможность подлога.

Если Вы получили фейковое уведомление о вводе логина и пароля (на примере Facebook), то игнорируйте его.

На этом все. Всем хорошего дня!