Отправить заявку

Как защититься от XSS атак

Думаю большинство из Вас знает, что такое XSS-атака, она же Cross-Site Scripting attack, а также многие из Вас знают как от них защищаться. Эта уязвимость основана на том, что хакер внедряет в страницу сайта какой-то свой код (HTML, JavaScript, а иногда даже и PHP). Это может привести к различного рода неприятностям.

Например:

  • Допустим на страницу была внедрена простая безобидная ссылка. Ссылка ведёт на сайт злоумышленника, и представляет собой точную внешнюю копию того сайта, на котором была размещена. Человек, попав на сайт злоумышленника, может нечаянным образом оставить свои логин и пароль. Создание точной копии сайта жертвы на сервере злоумышленника — очень эффективный способ взлома и распространён широко в интернете и он далеко не обязательно связан с XSS-атакой.
  • Очень часто вставка определённого кода осуществляется для рекламы или перенаправления на другой сайт.
  • С помощью XSS можно возможно выкрасть содержимое файлов cookie посетителей сайтов, в которых могут без проблем храниться пароли.
  • Помимо взлома и кражи сайта, всегда возможна порча содержимого и дефейс страницы, т.е. изменение внешнего вида.

Атаки XSS бывают активными и пассивными.

Пассивный XSS

Пассивный XSS заключается в том, что скрипт либо НЕ хранится на сервере уязвимого сайта, либо не может выполниться автоматически в браузере жертвы. Т.е. для его срабатывания нужно какое-то действие пользователя, например клик по ссылке. Этот тип XSS также называют первым типом.

Активный XSS

Подразумевается, что скрипт хранится на сервере и срабатывает в браузере при открытии страницы с заражённым объектом. Этот тип XSS также называют вторым типом. Этому типу подвержены сайты стандарта Веб 2.0, т.е. форумы, блоги, соц.сети и так далее.

От XSS уязвимости вас могут защитить две основные функции:

  • strip_tags() - удаляет из строки все HTML-теги, кроме разрешённых.
  • htmlspecialchars() - заменяет все спецсимволы на их HTML-аналоги (< заменяется на &lt; и т.д.)

В принципе, если проверять переданные пользователем переменные (будь то форма или простой запрос через адресную строку), то этих функций обычно хватает. Однако я бы посоветовал ещё проверять на наличие двоеточия (:), процента (%), слэшей (/ и \), а не только те, что в htmlspecialchars - &, ', ", <, >. Это уже делается функциями с регулярными выражениями - обычно preg_replace.

Некоторые проггеры запрещают только несколько тегов, типа <script> и <vbscript>. Но это неправильно, нужно запрещать практически все теги. Всё для безопасности. Не стоит ждать, когда Ваш сайт взломают.

Другие публикации