Гостевая
Форум
Разделы
Главная страница
Js скрипты
Php скрипты
Html шаблоны
Книги по Web дизайну
Статьи


Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

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

Источник: realcoding.net

В настоящей статье пойдет речь об одном из конфигурационных параметров языка программирования 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 Oreilly?;

# выводит: 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 Oreilly?;
$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. А жаль...



Похожие статьи:
- Софт для вебмастера
- РАСКРУТКА САЙТА – несколько советов в помощь веб-мастеру!
- Памятка начинающим хостерам по затыканию дырок в PHP
- Как разбивать запрос на страницы (постраничный вывод данных)?
- Мягкое повышение ИЦ и PR
- Php блокировка
- Что такое PageRank Googleа и как получить его по максимуму
- Бизнес на подкастах - уже реальность
- Дата на русском языке
- DDOS-атаки и методы борьбы с ними
- PHP пример парсинга URL для «User Friendly URLs»
- Неоправданное использование ООП
- Рисуем Елку


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |
[0.001]