Полезняшки: безопасный код
Много раз написав код, задумываешься, а безопасный ли он?
Что бы сэкономить себе время я 1 раз задумался и родил удобную процедуру для чистки данных получаемых от пользователя (заполнение формы, запросы и т.п.)
Так как я работаю только в UTF8 (в силу ряда причин и вообще), то кому надо, от скорректирует нужную кодировку.
Функция принимает минимум 1 переменную – сама строка. Дополнительно можно указать желание чистить код для sql запроса, чистка html тегов и приведение строки к каноническому виду.
function inputclean($input, $sql=false,
$tag = false, $strip = false) {
if ($tag)
{
$input = htmlentities($input, ENT_QUOTES, 'UTF-8');
//html_entity_decode()делает все обратно
}
// мнемонизировали строку.
if(get_magic_quotes_gpc ())
{
$input = stripslashes ($input);
// убрали лишнее теперь экранирование.
}
if ($sql)
{
$input = mysql_real_escape_string ($input);
// если нужен MySQL-запрос,
//то делаем соответствующую очистку.
// Подключение к базе должно быть активным!
}
if ($strip)
{
$input = strip_tags($input);
// если надо, то режем теги
}
//режем теги.
$input=str_replace ("\n"," ", $input);
$input=str_replace ("\r","", $input);
//обрабатываем переводы строки.
return $input;
}
Пользуйтесь функцией всегда. Даже если вам кажется, что ничего “лишнего” в данных не может быть.
Разработка интернет-магазинов, скриптов, SEO и повышение конвертации. Менеджмент онлайн проектов.
alexey
4 Feb, 2011
Есть похожая функция. Только я не парюсь и прохожусь ей сразу по $_GET и $_POST.
richkeeper
14 Feb, 2011
А обратно переводы строк, ставишь при выводе?
Роман
17 Feb, 2011
Да с переводами строк не очень понятно, а целом хорошая и полезная функция.
Vladimir
7 Aug, 2011
ИМХО stripslashes() нужно делать до htmlentities().
В текущем варианте если пришла строка
\”
после htmlentities() будет
\"
и stripslashes() не уберет этот лишний слэш.
bamax
23 Feb, 2012
Я в своих проектах тоже использую фильтр для основных глобальных переменных (ГЕТ, ПОСТ, Сессий, и Кук), принцип прост есть массив определенных так сказать нехороших слов, с которыми сравниваются все запросы глобальных переменных, и если чето такое получается, то пока я толко их собираю в базу, с последующим просмотром в админке с подробной информацией о запросе. Плюс у меня всегда register_globals offfff…