Блог веб-разработчика: в помощь программистам

Полезняшки: безопасный код

Много раз написав код, задумываешься, а безопасный ли он?

Что бы сэкономить себе время я 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;
    }

Пользуйтесь функцией всегда. Даже если вам кажется, что ничего “лишнего” в данных не может быть.

  • Есть похожая функция. Только я не парюсь и прохожусь ей сразу по $_GET и $_POST.

  • А обратно переводы строк, ставишь при выводе?

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

  • ИМХО stripslashes() нужно делать до htmlentities().

    В текущем варианте если пришла строка

    \”

    после htmlentities() будет

    \"

    и stripslashes() не уберет этот лишний слэш.

  • Я в своих проектах тоже использую фильтр для основных глобальных переменных (ГЕТ, ПОСТ, Сессий, и Кук), принцип прост есть массив определенных так сказать нехороших слов, с которыми сравниваются все запросы глобальных переменных, и если чето такое получается, то пока я толко их собираю в базу, с последующим просмотром в админке с подробной информацией о запросе. Плюс у меня всегда register_globals offfff…

You can follow any responses to this entry through the RSS 2.0 feed.