Php magic quotes setting

How to set the PHP magic quotes directive in an .htaccess file

This article describes how to enable and disable the magic quotes directive in an .htaccess file.

The information in this article only applies to certain types of hosting accounts. To determine whether or not the information below applies to your account, please see this article.

This article assumes that you have already set up a custom .htaccess file. If you have not already set up a custom .htaccess file, please read this article first.

This article only applies to PHP 5.3 and earlier versions. The magic quotes directive was removed in PHP 5.4.

Using the magic quotes directive

Make sure you are aware of the security implications of enabling and disabling the magic quotes directive. For more information, please visit http://www.php.net/manual/en/security.magicquotes.php.

When the magic quotes directive is enabled, PHP automatically escapes data from HTTP GET and POST requests and cookie data. For example, if a user types “hello” (with the quotation marks) in an HTML form, PHP automatically escapes the quotation marks and stores the value as \“hello\”.

To enable or disable the magic quotes feature, follow these steps:

  1. Log in to your account using SSH.
  2. Use a text editor to modify the .htaccess file as follows:
  3. To enable the magic quotes feature, add the following line:
php_flag magic_quotes_gpc On
php_flag magic_quotes_gpc Off

More Information

  • To view a complete list of PHP directives, please visit http://www.php.net/manual/en/ini.list.php.
  • For more information about the magic quotes directive, please visit http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc.

Источник

Магические кавычки в PHP

В PHP существует такое понятие, как «магические кавычки». Магические кавычки — эффект автоматической замены кавычки на обратный слэш и кавычку при операциях ввода/вывода в PHP.

Объясним подробнее. Пусть в форму, в поле с именем name пользователь ввел значение A»B, содержащее кавычку. Тогда, если в настройках PHP включены магические кавычки для GET, POST и COOKIE, после отправления формы в переменной $_POST[«name»] будет записано A\»B.

Зачем это делается? Изначально предполагалось, что это облегчит работу начинающих программистов и позволит им избежать ошибок, связанных с безопасностью при работе с базой данных. Однако, предположения не оправдались, магические кавычки только усложнили работу, причем для начинающих они совершенно непонятны. Мы будем считать, что магические кавычки — ошибка проектирования языка PHP, поэтому будем от них избавляться.

Технические детали

В PHP несколько видов магических кавычек. Наиболее распространенные:

  • magic_quotes_gpc (GET/POST/COOKIE) — слеши добавляются ко всем переменным $_GET, $_POST, $_COOKIE
  • magic_quotes_runtime — слэши добавляются к содержимому, читаемому из файлов

magic_quotes_gpc — часто по умолчанию бывают включены, тогда как magic_quotes_runtime практически всегда выключены (что делает их еще более опасными, так как при изменении настроек сервера программа, которая всегда работала, может перестать работать).

Изменить настройки магических кавычек можно несколькими способами:

  1. php.ini на сервере (строчка: magic_quotes_gpc = Off)
  2. php.ini в текущем каталоге
  3. .htaccess в текущем каталоге (строчка: php_flag magic_quotes_gpc Off)
  4. функция php (например, set_magic_quotes_gpc ( 0 ) )

Возможность изменить настройки тем или иным способом зависит от настроек php (например, может быть запрещено изменение параметров некоторыми из методов 2,3,4).

Автоматическое добавление слэшей аналогично работе функции addslashes(), а именно: слэш добавляется к двойной кавычке, к одинарной кавычке, к слэшу, к символу null. Убрать слэши и вернуть строку в исходное состояние можно функцией stripslashes ( ) .

Борьба с магическими кавычками

Мы не будет полагаться на то, что сможем изменить настройки (в некоторых случаях это все-таки невозможно). Поэтому нам требуется правильно обрабатывать оба случая. Для этого, если магические кавычки включены, вырежем их из массивов $_POST, $_GET и $_COOKIE.

function stripslashes_array ( $array ) {
return is_array ( $array ) ?
array_map ( ‘stripslashes_array’ , $array ) : stripslashes ( $array ) ;
}

if ( get_magic_quotes_gpc ( ) ) {
$_GET = stripslashes_array ( $_GET ) ;
$_POST = stripslashes_array ( $_POST ) ;
$_COOKIE = stripslashes_array ( $_COOKIE ) ;
}

Данное изящное решение взято из кода форума punbb. Другие современные скрипты используют нечто аналогичное. Функция stripslashes_array рекурсивно удаляет все дополнительные слеши из элементов массива, элементов подмассива и.т.д. Функция array_map, применяет заданную функцию ко всем элементам массива. Здесь используется оператор ?: (условие?выражение1:выражение2), результатом которого является выражение1, если условие верно, и выражение 2, если условие неверно.

Можно было бы написать иначе:

function stripslashes_array ( $array ) {
if ( is_array ( $array ) )
return array_map ( ‘stripslashes_array’ , $array ) ;
else return stripslashes ( $array ) ;
}
?>

Статья написана по материалам онлайн-курса «Программирование на PHP».

© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.

1234ru

элементы массивов $_GET, $_POST, $_COOKIE сами заведомо не являются массивами (по стандарту HTTP это всегда строки)

Т.е. формирование массива в качестве одного из GET-параметров, например, в из формы

rgbeast

1234ru

Я, на самом деле, тоже точно не знаю. Просто в соседней теме bur написал:

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

rgbeast

HTML не может противоречить стандарту HTTP, поэтому bur прав.

Стандарт URI оставляет особенности интерпретации того, что после знака ? на волю приложений:
http://tools.ietf.org/html/rfc2396

© 2008—2023 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.

Источник

set_magic_quotes_runtime

Задает текущее активное значение настройки magic_quotes_runtime.

С версии PHP 5.3.0 эта функция считается УСТАРЕВШЕЙ. Крайне не рекомендуется полагаться на эту возможность.

Ошибки

С версии PHP 5.3 эта функция устарела и при запуске вызывает предупреждение E_DEPRECATED. С версии PHP 5.4 эта функция также вызывает ошибку E_CORE_ERROR при попытке включить magic quotes.

Список параметров

FALSE — выключено, TRUE — включено.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования set_magic_quotes_runtime()

// Создаем временный указатель на файл
$fp = tmpfile ();

// Пишем в файл какие-то данные
fwrite ( $fp , ‘\’PHP\’ is a Recursive acronym’ );

// без magic_quotes_runtime
rewind ( $fp );
set_magic_quotes_runtime ( false );

echo ‘без magic_quotes_runtime: ‘ . fread ( $fp , 64 ), PHP_EOL ;

// С magic_quotes_runtime
rewind ( $fp );
set_magic_quotes_runtime ( true );

echo ‘С magic_quotes_runtime: ‘ . fread ( $fp , 64 ), PHP_EOL ;

Результат выполнения данного примера:

без magic_quotes_runtime: 'PHP' is a Recursive acronym С magic_quotes_runtime: \'PHP\' is a Recursive acronym

Смотрите также

  • get_magic_quotes_gpc() — Получение текущего значения настройки конфигурации magic_quotes_gpc
  • get_magic_quotes_runtime() — Получение текущего значения настройки конфигурации magic_quotes_runtime

Источник

‘Волшебные Кавычки’ (Magic Quotes)

«Волшебные Кавычки» (Magic Quotes) — это процесс, который позволяет автоматически экранировать входные данные PHP скрипта. Данный принцип позволяет экранировать внешние данные, приходящие в PHP скрипт во время его выполнения.

Что представляют собой «Волшебные Кавычки»?

Когда «Волшебные Кавычки» включены (активизированы), все (одиночные кавычки), « (двойные кавычки), (левый слэш) и NULL знаки автоматически экранируются левыми слэшами (). Данный принцип аналогичен действию функции addslashes().

Существуют три директивы «Волшебных Кавычек»:

  • magic_quotes_gpc Затрагивает данные запросов HTTP (GET, POST, и COOKIE). Не может быть установлена в процессе работы PHP скрипта и установлена в on по умолчанию. Смотрите также описание функции get_magic_quotes_gpc().
  • magic_quotes_runtime Если данная директива включена (on), большинство функций, которые возвращают данные из внешнего источника, включая базы данных и текстовые файлы, будут экранировать данные левыми слэшами (). Может быть установлена во время выполнения PHP скрипта. По умолчанию директива установлена в off. Смотрите описание функций set_magic_quotes_runtime() и get_magic_quotes_runtime().
  • magic_quotes_sybase Если данная директива включена (on), одиночные кавычки экранируются двойными кавычками, вместо левых слэшей (). Причем если данная директива установлена в on, это полностью отменяет установку директивы magic_quotes_gpc. Включение (on) обеих директив будет означать, что будут экранироваться только одиночные кавычки двойными кавычками («). Двойные кавычки («), левые слэши ( ) и NULL останутся нетронутыми. Смотрите также описание функции ini_get(), которая позволяет получить значения упомянутых директив.

Зачем использовать «Волшебные Кавычки»?

1. Это полезно для начинающих программистов PHP

«Волшебные кавычки» были добавлены в PHP, чтобы помочь начинающим программистам языка PHP избегать фатальных последствий для безопасности системы при ошибках в коде написанных PHP скриптов, причем автоматически, без участия самого программиста. Хотя риск SQL инъекций при этом остается возможным, степень такого риска сводится к минимуму.

Для того, чтобы вставлять данные в базу данных, «Волшебные Кавычки» можно не добавлять функцией addslashes() на всех Get, Post, и Cookie запросах, а делать это автоматически.

Почему не нужно использовать «Волшебные Кавычки»?

Включение экранирования и его выключение влияет на вашу мобильность. Используйте функцию get_magic_quotes_gpc() для проверки активной установки конфигурации «Волшебных Кавычек».

Поскольку не каждая часть экранируемых данных используется в базах данных, существует потеря производительности PHP, поскольку обработка данных на предмет необходимости «экранирования» влечет за собой некоторую дополнительную нагрузку на систему. При необходимости произвести «экранирование» данных вы можете просто обращаться к соответствующим функциям (таким как addslashes()) и не пребегать к автоматическому экранированию «Волшебными Кавычками».

Вообще, при установке рекоммендуемых значений директив в файле конфигурации php.ini, автоматическое использование «Волшебних Кавычек» отключено, именно по соображениям производительности.

Поскольку не все данные нуждаются в экранировании, часто раздражет видеть «Волшебные Кавычки» там, где их не должно быть.Например, используя скрипт посылки электронной почту из формы, и видя связку в полученном сообщении электронной почты. А для устанения данной неприятности вам нужно будет часто прибегать к использованию функции stripslashes(), что, согласитесь, не очень удобно.

Отключение «Волшебных Кавычек»

Директива magic_quotes_gpc может быть выключена (off) только на системном уровне, но не во время исполнения скрипта. Так что функция ini_set() в данной ситуации вам не поможет.

Пример 1. Отключение «Волшебных Кавычек» на стороне сервера

Данный пример показывает как установить значение директивы «Волшебных Кавычек» в Off в файле конфигурации php.ini.

; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of '). magic_quotes_sybase = Off

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

php_flag magic_quotes_gpc Off

Если вам интересен небольшой переносимый PHP код, который позволяет конфигурировать «Волшебные Кавычки» во время исполнения скрипта определенным образом, то для вас ниже приведен листинг этого кода. Этот метод неэффективен, но иногда его использование может помочь. Итак, отключение magic_quotes_gpc во ремя исполнения скрипта PHP.

Пример 2. Альтернативный способ отключения «Волшебных Кавычек» во время исполнения скрипта

if ( get_magic_quotes_gpc ()) <
function stripslashes_deep ( $value )
<
$value = is_array ( $value ) ?
array_map ( ‘stripslashes_deep’ , $value ) :
stripslashes ( $value );

return $value ;
>

$_POST = array_map ( ‘stripslashes_deep’ , $_POST );
$_GET = array_map ( ‘stripslashes_deep’ , $_GET );
$_COOKIE = array_map ( ‘stripslashes_deep’ , $_COOKIE );
>
?>

Рекомендуем почитать

Источник

Читайте также:  Insert text html tag
Оцените статью