PHP

Защита сайта


В этой статье изложены простые советы по защите сайта от взлома с помощью обработки данных, поступающих от пользователя.

Эти приемы не дают 100% гарантию от взлома Вашего сайта, поэтому для защиты важной коммерческой информации этого будет недостаточно.

Для обеспечения безопасности веб-сайта от взлома необходимо выполнять фильтрацию вводимых данных. Фильтрация защищает от 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-инъекций (Подключение к базе должно быть активным!).
Пример:
<?php
function safevar($var, $sql=false) {
    $var= htmlentities($var, ENT_QUOTES, `UTF-8`);
    // мнемонизировали строку.

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

    return $var;
}

$var1 = "`><a href=`#test`> _</a>Тест¶";   

$var2 = "``;!--"<XSS>=&{()}";  

echo safevar($var1);

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

?>
Теги:
защита, взлом, сайт, strip_tags, htmlspecialchars, htmlentities, stripslashes
Добавлено: 16 Сентября 2013 01:23:06 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...