Почти каждый день можно встретить на форуме темы, так или иначе касающихся вопроса «а как же фильтровать данные, зачем фильтровать, подойдет ли мне эта функция для фильтрации, мне сказали, что в скрипте дыра и на главной странице моего сайта кто-то нацепил картинку, оскорбляющую мою честь и достоинство».
По быстренькому и простому, что и как делать:
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% всех возможных уязвимостей в коде, связанных с пользовательскими данными, но, по статистике взломов, даже эти мелочи не исполняются полностью то ли по невнимательности, то ли через мысли «а, никто не догадается» или «никому мой скрипт не нужен».