Каковы магические кавычки во время выполнения PHP?

Я полностью осознаю аберрацию магических цитат в PHP, как это зло, и я избегаю их, как вредителей, но что такое magic_quotes_runtime? От php.ini:

Волшебные кавычки для генерируемых во времени данные, например. данные из SQL, из exec(), и др.

Есть ли что-то, что я должен проверить, если ON и выключить с помощью:

set_magic_quotes_runtime(false);

Он часто включен по умолчанию? Я знаю, что он устарел в 5.3.0 и удален в 6.0.0, но поскольку моя поддержка script 5.1.0+ мне хотелось бы знать, как это сделать в "устаревшем" PHP (если это имеет значение).

Изменить: Чтобы все было ясно, я хочу выйти ( "Отключить магические цитаты" ); когда кавычки Magic включены. Я не полагаюсь на них!

Ответ 1

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

http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-runtime

Ответ 2

Вы можете использовать ini_get для проверки его значения, например:

ini_get('magic_quotes_runtime');

Также вы должны обернуть вызовы set_magic_quotes_runtime/get_magic_quotes_runtime в вызовах function_exists, например:

if (function_exists('set_magic_quotes_runtime')) {
set_magic_quotes_runtime(true/false);
}

Но, конечно, не следует полагаться на магические цитаты вообще, и, если возможно, они должны быть отключены. Поместите эту ссылку в кучу причин, почему: http://www.php.net/manual/en/security.magicquotes.whynot.php

Ответ 3

Если магические кавычки включены, php автоматически выйдет из кавычек, входящих в переменные POST или GET, и автоматически их не удалит при извлечении данных из базы данных, например.

Если вы используете такие вещи, как addslashes(), mysql_escape_string() или mysql_real_escape_string() с магическими кавычками, вы получите двойные кавычки.

Причина, по которой это зло, та же самая причина, что addlashes() и mysql_escape_string() являются злыми, потому что они не фиксируют все возможные методы помещения цитаты в строку. Это дает вам ложное чувство безопасности, думая, что вам больше не нужно беспокоиться об ускорении цитат, когда на самом деле вы все еще делаете.

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