Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'redirect_login_page' not found or invalid function name in /var/www/yur88222767/data/www/1st-network.ru/wp-includes/class-wp-hook.php on line 308
XSS атака и защита - В сети

XSS атака и защита


Содержание

Под атакой на сайт в этой статье подразумевается, попытка взлома защиты сайта и получение полномочий админа.

Вообще выделяют несколько типов атак:

  • атака, связанная с подменой информации;
  • атака, связанная с модификацией или раскрытием критически важных данных.

XSS атака (Cross Site Scripting)

XSS атака — несанкционированная модификация html кода через входные параметры, передаваемые методом POST (например, форма регистрации на сайте) или GET (код в адресной строке).

Т.е. при данной атаке прием информации от хакера происходит из форм, параметров GET запроса или cookie. В особо критичных случаях: прием любой информации происходит с backend-серверов, например из базы данных.

Чтобы обезопасить себя от такого рода атак никогда не доверяйте никакой входящей информации (GET, POST, cookie). Если вы получаете какие-то входные данные, всегда проверяйте их на корректность, приводите к требуемому типу (string, boolean, int), также ставьте ограничения на длину передаваемой строки. Никогда не ищите ошибок в получаемых данных.

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

$year = abs(int)$_POST['year']; //приводим год к положительному числу

В случае получения строки как входной информации, надо фильтровать эту строку:

  • strip_tags — удалить теги.
  • trim — удалить пробелы.
  • substr — приведение к маленьким буквам.
  • strtr — замена символов.
  • С помощью регулярных выражений.

Если входящие данные — это числа, то фильтруем их:

$a = (int)$b; - приводим к типу integer
$a = (boolean)$b; - приводим к 1 или 0
$a = (float)$b; - приводим к float
is_numeric($a); - это число?

Сейчас во всех современных приложениях для фильтрации входящих данных создается один файл, и через него проходит вся инфа:

Еще одна опасность XSS атак — можно утащить файлы cookie.

Как утащить cookie?

Допустим, есть форум. На нем записи. На форум заходит юзер. До него хакер постит свою запись на форум. Эта запись появляется на странице форума. А внутри этой записи — java-скрипт. Юзер регистрируется на форуме, для него открывается сессия, и у него на компе сохраняется cookie. Загружается страница в браузер юзера вместе с java-скриптом. И java-скрипт вытаскивает cookie и посылает хакеру. Тогда хакер заходит на форум от имени юзера.

Чтобы избежать этого, для cookie пишем следующий код:

setcookie('name','znachenie',12345,'/','site.com',0,true);

В коде идут 7 параметров: имя, значение, время действия, путь, домен, 0 — если используем http протокол (1 — https), http_only — всегда выставляейте в значение true (браузер должен отдавать cookie только по http запросу). Благодаря последнему параметру, скрипт не выцепит cookie.

Общие рекомендации для защиты от XSS атак:

  • Отключить register_globals.
  • Найти в файлах все упоминания $_REQUEST, $_POST, $_GET, $_SERVER, $_COOKIE и отфильтровать получаемые данные.
  • используйте прием ‘одного окна’, т.е. приложение должно обращаться к входным данным только через несколько функций-оберток, в которых осуществляется фильтрация и проверка.


Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Для отправки комментария, поставьте отметку, что разрешаете сбор и обработку ваших персональных данных . Политика конфиденциальности