Содержание
Под атакой на сайт в этой статье подразумевается, попытка взлома защиты сайта и получение полномочий админа.
Вообще выделяют несколько типов атак:
- атака, связанная с подменой информации;
- атака, связанная с модификацией или раскрытием критически важных данных.
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.
Допустим, есть форум. На нем записи. На форум заходит юзер. До него хакер постит свою запись на форум. Эта запись появляется на странице форума. А внутри этой записи — 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 и отфильтровать получаемые данные.
- используйте прием ‘одного окна’, т.е. приложение должно обращаться к входным данным только через несколько функций-оберток, в которых осуществляется фильтрация и проверка.