Поиск по сайту Подписаться Реклама
Яндекс.Метрика
Яндекс цитирования
Информационный сайт по аудио и видео
blog o_0 ИгрыNekketsu Kakutou DensetsuYeti Sports 3: Seal BounceTerror (The Initation)FlyberNekketsu|Super Dodge Ball (Русская Версия)Jump the Gorge Ключ к Last Oasis со скидкой 85%. Официальная активация. Жми, чтобы успеть! СофтКоллекция браузеров Mozilla FireFoxEmilNES 0.3.1Декодер DivX + mp3Melody Player For Motorola 3.2.2CloneDVD Mobile 1.1.4.0DAEMON Tools 4.03 x64СтатьиСовременные смартфоны Land RoverИгровые автоматы стремительно завоевывают звание самых популярных развлечений онлайн-пространстваКлуб гаминаторслотсВыиграть на сайте http://игровыеавтоматывулкан.онлайнНемыслимое количество удовольствия и энергия на весь деньОцифровка VHS или захват видео в VirtualDub (2003 г.) Вкусное700! игр для сотовых телефонов700! игр для сотовых телефоновПакет из 700 игр для мобильников! Преимущественно адаптированных для Siemens, но многие идут и на телефонах других марок. 64 мегабайта отборного…Сборник лучших игр Денди (NES, Dendy)Сборник лучших игр Денди (NES, Dendy)По многочисленным просьбам пользователей моего сайта www.ddvhouse.ru была собрана коллекция лучших, по мнению игроков, игр Денди. Все игры…

Как бороться с magic_quotes_gpc

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

Параметр magic_quotes_gpc влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы [одиночные (') и двойные кавычки ("), обратный слеш (\), байт NULL] автоматически экранируются интерпретатором PHP (перед каждым таким символом добавляется обратный слеш). При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные (в противном случае возможна атака SQL-injection) непосредственно в коде приложения. Для этого в PHP существует функция addslashes (выдержка из документации):

$str = "Is your name O'reilly?";

# выводит: Is your name O\'reilly?
echo addslashes($str);

Все, вроде бы, просто. Использование в коде приложения функции addslashes в случае, если заведомо известно, что директива magic_quotes_gpc равна 0, вполне обосновано. Но что если администратор хостинга решит установить ее значение в единицу? Будет происходить двойное экранирование спецсимволов! Поэтому, функцию addslashes необходимо применять только в том случае, когда magic_quotes_gpc = 0. Получить текущее значение данного конфигурационного параметра можно при помощи стандартной функции get_magic_quotes_gpc. Таким образом, более универсальный код будет иметь следующий вид:

$str = "Is your name O'reilly?";
$str = (!get_magic_quotes_gpc()) ? addslashes($str) : $str;

# выводит при любых настройках PHP: Is your name O\'reilly?
echo $str;

Если писать каждый раз такую конструкцию, то код разрабатываемого веб-приложения становится достаточно громоздким. Гораздо эффективней использовать в начале каждого файла PHP универсальный код, осуществляющий при необходимости описанную выше обработку. Он будет иметь следующий вид:

function addslashes_for_array(&$arr)
{
   foreach($arr as $k=>$v)
   {
       if (is_array($v))
       {
           addslashes_for_array($v);
           $arr[$k] = $v;
       }
       else
       {
           $arr[$k] = addslashes($v);
       }
   }
}

function fix_magic_quotes_gpc()
{
   if (!get_magic_quotes_gpc())
   {
       addslashes_for_array($_POST);
       addslashes_for_array($_GET);
       addslashes_for_array($_COOKIE);
   }
}

# экранирует при необходииости строки в $_GET, $_POST, $_COOKIE
fix_magic_quotes_gpc();

Следует заметить, что описанный код учитывает также тот факт, что в переменных $_GET, $_POST, $_COOKIE могут передаваться не только строки, но и многомерные массивы строк.

P.S. В ходе проведенного недавно нашей компанией исследования некоторых веб-сайтов выяснилось, что многие достаточно известные веб-разработчики не учитывают параметр magic_quotes_gpc. А жаль...

Взято с http://www.controlstyle.ru/

Выложено: 01/10/07