Что такое magic quotes runtime в PHP?

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

магические кавычки для среды выполнения данные, например данные из SQL, из exec(), так далее.

это то, что я должен проверить, включен ли и выключен с:

set_magic_quotes_runtime(false);

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

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

3 ответов


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

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


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

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

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

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


вы можете использовать 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