Php magic quotes gpc php ini

get_magic_quotes_gpc

Эта функция УСТАРЕЛА, начиная с PHP 7.4.0 и была УДАЛЕНА, начиная с PHP 8.0.0. Использовать эту функцию крайне не рекомендуется.

Описание

Всегда возвращает false .

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

У этой функции нет параметров.

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

Всегда возвращает false .

Список изменений

Версия Описание
7.4.0 Функция объявлена устаревшей.

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

  • addslashes() — Экранирует строку с помощью слешей
  • stripslashes() — Удаляет экранирование символов
  • get_magic_quotes_runtime() — Получение текущего значения настройки конфигурации magic_quotes_runtime
  • ini_get() — Получает значение настройки конфигурации

User Contributed Notes 10 notes

@ dot dot dot dot dot alexander at gmail dot com

I suggest replacing foreach by «stripslashes_deep»:

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

Here’s what I came up with to remove magic quotes from request data.

Replaces two single-quotes with one if magic_quotes_sybase are on, otherwise it just strips slashes.

Note that the `foreach` style makes this work only with PHP 5 and above.

// Unescape data
$stripslashes_deep ( $_POST , $stripslashes_deep );
$stripslashes_deep ( $_GET , $stripslashes_deep );
$stripslashes_deep ( $_COOKIE , $stripslashes_deep );
$stripslashes_deep ( $_REQUEST , $stripslashes_deep );
>

Please note, that when magic_quotes_gpc is set not only $_POST, $_GET, $_REQUEST, $_COOKIE arrays values are slashed. Actually every string value in $GLOBALS array is slashed, ie. $GLOBALS[‘_SERVER’][‘PATH_INFO’] (or $_SERVER[‘PATH_INFO’]).

function stripper ( $stringvar ) <
if ( 1 == get_magic_quotes_gpc ()) <
$stringvar = stripslashes ( $stringvar );
>
return $stringvar ;
>
?>

Usage:

$Body = stripper ( $rs -> fields ( ‘Body’ ));
echo( $Body );
?>

This checks if get_magic_quotes_gpc() is on and strips a string variable for output if its on. Useful if the dev server and live server are set up different.

Escaping of key-strings in GPC-arrays behave different to the escaping of their values.

First I expected that keys in submitted gpc-arrays are never escaped.
Anyway. After I saw escaped keys, I assumed they’re escaped according to the settings of magic quotes.
. it’s even worse.

It took me over 2 days of testing to figure out the exact behavior and creating two functions (one for each php-version) that strips slashes reliably from any array submitted to a script. Hope this saves someones time and nerves.

Читайте также:  Java util log properties

The following is true for $_GET- and $_POST-arrays. I hope other arrays affected by magic quotes behave equally.
I did not test the behavior for cases where magic_quotes_sybase is set.

== legend for possible case combinations ==
Px = php version we’re using
P4 = php 4.3.9
P5 = php 5.0.2

MQ = MagicQuotes GPC
+MQ = magic quotes enabled
-MQ = magic quotes disabled

TL = TopLevel key
+TL = key is on top level (i.e. $_GET[‘myKey’])
-TL = key is nested within another array (i.e. $_GET[‘myList’][‘myKey’])

AK = ArrayKey
+AK = the value of the key is another array (i.e. is_array($_GET[‘myKey’]) == true)
-AK = the value is a normal string (i.e. is_string($_GET[‘myKey’]) == true)

== legend for possible results ==
KE = KeyEscaping
+KE = control chars are prefixed with a backslash
-KE = key is returned as submitted and needn’t to be stripped

VE = ValueEscaping (doesn’t apply for array as value)
+VE = control chars are prefixed with a backslash
-VE = value is returned as submitted and needn’t to be stripped

== here we go — the following rules apply ==
1) P4 +MQ +AK +TL —> -KE
2) P4 +MQ +AK -TL —> +KE
3) P4 +MQ -AK +TL —> -KE +VE
4) P4 +MQ -AK -TL —> +KE +VE
5) P4 -MQ +AK +TL —> -KE
6) P4 -MQ +AK -TL —> -KE
7) P4 -MQ -AK +TL —> -KE -VE
8) P4 -MQ -AK -TL —> -KE -VE
9) P5 +MQ +AK +TL —> -KE
10) P5 +MQ +AK -TL —> +KE
11) P5 +MQ -AK +TL —> +KE +VE
12) P5 +MQ -AK -TL —> +KE +VE
13) P5 -MQ +AK +TL —> -KE
14) P5 -MQ +AK -TL —> -KE
15) P5 -MQ -AK +TL —> +KE -VE
16) P5 -MQ -AK -TL —> +KE -VE
17) The chars ‘.’, ‘ ‘ are always replaced by ‘_’ when used in keys.

Example (rule 15):
When running under php 5.0.2 having magic quotes disabled, gpc-keys on top level containing strings are escaped while their associated values are not.

== The following function will strip GPC-arrays for php 4.3.9 ==

function transcribe ( $aList , $aIsTopLevel = true ) <
$gpcList = array();
$isMagic = get_magic_quotes_gpc ();

foreach ( $aList as $key => $value ) <
$decodedKey = ( $isMagic && ! $aIsTopLevel )? stripslashes ( $key ): $key ;
if ( is_array ( $value )) <
$decodedValue = transcribe ( $value , false );
> else <
$decodedValue = ( $isMagic )? stripslashes ( $value ): $value ;
>
$gpcList [ $decodedKey ] = $decodedValue ;
>
return $gpcList ;
>
?>

Читайте также:  Vertical Line in html

== The following function will strip GPC-arrays for php 5.0.2 ==
function transcribe ( $aList , $aIsTopLevel = true ) <
$gpcList = array();
$isMagic = get_magic_quotes_gpc ();

foreach ( $aList as $key => $value ) <
if ( is_array ( $value )) <
$decodedKey = ( $isMagic && ! $aIsTopLevel )? stripslashes ( $key ): $key ;
$decodedValue = transcribe ( $value , false );
> else <
$decodedKey = stripslashes ( $key );
$decodedValue = ( $isMagic )? stripslashes ( $value ): $value ;
>
$gpcList [ $decodedKey ] = $decodedValue ;
>
return $gpcList ;
>
?>

Usage:

$unstrippedGET = transcribe ( $_GET );
$unstrippedPOST = transcribe ( $_POST );
?>

Maybe someone is willing to test those combinations for other php-versions and with magic_quotes_sybase set to ‘on’ — let me know.
Sorry for this huge amount of text, but it’s complete. I was unable to compress the decision table more than this.

Источник

Магические кавычки в 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 ) )
Читайте также:  Html вставка word документа

Возможность изменить настройки тем или иным способом зависит от настроек 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.

Источник

Оцените статью