Как защититься от xss атаки и устранить уязвимость

« Предыдущая запись
 
  Следующая запись »
 

xss Как защититься от xss атаки и устранить уязвимость Количество Хпециалистов (с большой буквы ха — прим.ред.) в области веб-строения растёт с каждым днём, количество уязвимых сайтов, соответственно, тоже. Помню, когда я сам только начинал работать в этой области, я мало уделял внимание безопасности, и сейчас могу сказать почему.

Дело в том, что в большинстве литературных источников про это говорится либо очень мало, либо ни слова. Откуда начинающий пользователь узнает о потенциальном враге, если его держать в неведении? Именно поэтому я постараюсь уделять внимание вопросам безопасности при написании скриптов. И начну я, пожалуй, с самой известной атаки — XSS.

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

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

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

Пассивный XSS

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

Активный XSS

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

 

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

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

Подробнее об этих функциях можно прочитать в статье о php-функциях для работы со строками.

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

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

Профессионалы советуют использовать на сайте несколько уровней жёсткости проверки переданных данных, к примеру:

  1. Уровень 1. Самый жёсткий. Запретить всё, кроме букв и знаков препинания - точка и запятая. Если появится запрещённый символ, то прекращать работу сценария - die().
  2. Уровень 2. Уже не такой жёсткий, можно разрешить несколько основных и безопасных тегов, типа <b> и <i>. И то стоит использовать их заменители [b], [i], а заменять их на теги программно. В случае ввода запрещённого символа - сообщение об ошибке и прерывание работы сценария.
  3. Уровень 3. Аналогично второму, но в случае ошибки - информацию об ошибке не выводить, а проводить замену на аналоги. Уровень для форумов с предусмотрением того, что можно будет оставлять код программ.
  4. Уровень 4. Всё разрешено. Но всё равно проверять на совсем гадкое стоит. Использовать режим не рекомендуется, разве что может для совсем своих проектов или на локальной машине.

 

Пожалуй на сегодня всё. Жду Ваших комментариев и замечаний, так как наверняка есть ещё идеи на тему.

 

Начиная с этой недели я опять возвращаюсь к публикациям два раза в неделю и надеюсь буду держать так ещё долго, постараюсь писать ещё чаще, если получится. А пока до новых встреч!

, ,

1 звезда2 звезд3 звезд4 звезд5 звезд (голосов: 7, средний: 4.71 из 5)
Понравилась статья или журнал? Подписывайся на продолжение!
Отзывов нет на запись

"Как защититься от xss атаки и устранить уязвимость"

Добро пожаловать, коллега! Вы можете оставить свой отзыв:





Допустимые XHTML-теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подписка на комментарии