ВАЖНО Фильтрация переменных, как правильно фильтровать данные, краткая шпаргалка


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 082
Репутация
8 198
NSA_TOR_etc600.jpg


Почти каждый день можно встретить на форуме темы, так или иначе касающихся вопроса «а как же фильтровать данные, зачем фильтровать, подойдет ли мне эта функция для фильтрации, мне сказали, что в скрипте дыра и на главной странице моего сайта кто-то нацепил картинку, оскорбляющую мою честь и достоинство».Dmeh-Smeh-Smeh!!!

По быстренькому и простому, что и как делать:

1) Если в переменной должно быть число — используем $var=abs(intval($var)).

Или: $var=filter_var($var,FILTER_SANITIZE_NUMBER_FLOAT).


2) Если переменную надо вывести в браузер — используем $var=htmlspecialchars($var, ENT_QUOTES, «UTF-8»).

Не забывайте, это фильтрует только опасные символы для того, чтобы они не работали как html-код.

Иногда надо ограничить длину строки, обрезать её — это все должно быть сделано до фильтрации, иначе бывают случаи, когда & разрезается на две части, и мы получаем невалидную страницу (что самое парадоксальное, подобный баг был в самом ВКОНТАКТЕ в личных сообщениях, может и до сих пор сохранилась ошибка).

3) Если переменную надо ввести в базу данных:

а) можно просто очистить с помощью mysql_real_escape_string, но не забыть потом при выводе фильтрировать с помощью htmlspecialchars.

б) фильтрируем с помощью htmlspecialchars, затем mysql_real_escape_string, затем запись в базу

Вот и все. Главное, думать, что вы делаете, а не просто использовать 10 функций фильтрации, не понимая зачем они.

Эти простые советы закроют минимум 90% всех возможных уязвимостей в коде, связанных с пользовательскими данными, но, по статистике взломов, даже эти мелочи не исполняются полностью то ли по невнимательности, то ли через мысли «а, никто не догадается» или «никому мой скрипт не нужен».
 
Верх Низ