Логин:
Пароль:
Регистрация / Вост. Пароль
Доллар ⇒ 30.97 руб.
Евро       ⇒ 39.33 руб.
Профнастил по зимним ценам: Профнастил. Фасады. Фасадные системы.



получить код:
E-mail Владельца сайта idezign.org
PHP: фильтр от XSS и SQL-инъекций
Предлагаю небольшое исследование на тему безопасности веб-приложений и фильтрации вводимых данных. Скорее всего, я ещё вернусь к этой теме, но сейчас больше хочется не писать трехтомник, а сохранить и упорядочить собранное и проверенное. В частности, речь пойдёт о фильтрационной защите от XSS-атак и SQL-инъекций.

В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:

strip_tags() – вырезает теги HTML и PHP из строки.

htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘”‘, ”’, ‘’) в HTML сущности (‘&’, ‘"’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

htmlentities() – конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

stripslashes() – удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.

Эта конфигурация влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы (одиночные и двойные кавычки, обратный слэш, байт NULL) автоматически экранируются. При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные.


mysql_real_escape_string – мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.

На основе этих данных, можно собрать функцию для однозначной очистки непроверенных данных. Эта функция получает две переменные – строку с введёнными символами и булево значение для определения – требуется ли приведение к MySQL-запросу. Возвращает функция очищенную строку. Конечно, это не панацея, но функцию легко изменить под собственные нужды.

Пример с интернета:
function inputclean($input, $sql=false) {
    $input = htmlentities($input, ENT_QUOTES, 'UTF-8');
    // мнемонизировали строку.

    if(get_magic_quotes_gpc ())
    {
        $input = stripslashes ($input);
        // убрали лишнее теперь экранирование.
    }
    if ($sql)
    {
        $input = mysql_real_escape_string ($input);
        // если нужен MySQL-запрос, то делаем соответствующую очистку.
        // Подключение к базе должно быть активным!
    }
    $input = strip_tags($input);
    //режем теги.

    $input=str_replace ("\n"," ", $input);
    $input=str_replace ("\r","", $input);
    //обрабатываем переводы строки.

    return $input;
}

// ----------------------------------------------------
// Дальше - пример использования для фильтрации данных
// без MySQL и для фильтрации в качестве MySQL-запроса.
// ----------------------------------------------------

$test1 = "'><a href='#test'>&nbsp;_</a>Безумная тестовая запись со всякими \n";  
$test2 = "'';!--\"<XSS>=&{()}";  

echo inputclean($test1);

$link = mysql_connect("localhost", "root", "") or die("Could not connect");
echo inputclean($test2, true);

Если кто-то обнаружит ошибки, или знает способ лучше – добро пожаловать в комментарии, мне очень интересно.

Теги: данных, символы, строку, фильтрации, Используется, специальные, защиты, функция, magic_quotes_gpc, сущности, конвертирует, строки, mysql_real_escape_string, требуется, пользователем, stripslashes, input


Добавить на: Facebook Добавить на: Google Добавить на: Linkarena Добавить на: Power Oldie Добавить на: Digg Добавить на: Del.icio.us Добавить на: Reddit Добавить на: Jumptags Добавить на: Simpy Добавить на: StumbleUpon Добавить на: Slashdot Добавить на: Propeller Добавить на: Furl Добавить на: Yahoo Добавить на: Spurl Добавить на: Blinklist Добавить на: Blogmarks
Категория: Другое / 11/04/2010 / автор: idezign / просмотров: 1772 / (0)

Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.

©2005-2010 idezign.org / Rules / Privacy
При цитировании или ином использовании материалов, опубликованных на "IDEZIGN", ссылка на «www.idezign.org» строго обязательна.