На какие суперглобалы влияет magic_quotes_gpc = 1? - PullRequest
4 голосов
/ 08 января 2010

Глядя на название этой директивы, можно подумать, что magic_quotes применяются только к $_GET, $_POST и $_COOKIE суперглобалам, но есть один возмущающий комментарий в руководстве по PHP :

Обратите внимание, что когда magic_quotes_gpc устанавливается не только $_POST, $_GET, $_REQUEST, $_COOKIE значения массивов сокращаются. На самом деле каждое строковое значение в массиве $GLOBALS косая, т. е. $GLOBALS['_SERVER']['PATH_INFO'] (или $_SERVER['PATH_INFO']).

Кто-нибудь может подтвердить, что это правда? Также влияют суперглобалы $GLOBALS, $_SERVER, $_FILES, $_SESSION и $_ENV?

Еще один вопрос, если я перебираю stripslashes() по массивам $_GET, $_POST и $_COOKIE, мне также нужно перебирать массив $_REQUEST? Или изменения отражаются автоматически?

Ответы [ 2 ]

2 голосов
/ 08 января 2010

В любом случае, я бы посоветовал вам не полагаться на GPC, поскольку он устарел в новых версиях PHP ...

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

Чтобы приблизить его к идеальному, в нем есть пара функций, поскольку он также должен поддерживать целочисленные, логические и нулевые значения, но вы можете взглянуть на исходный код классов Database и Database_mysql в NaturePhp .

2 голосов
/ 08 января 2010

Я провел несколько тестов на LightTPD 1.4.20 и PHP 5.3.0 с magic_quotes_gpc = On и $_SERVER, которые не были изменены (по крайней мере, [SERVER_NAME] => local'host не изменился). $_SESSION также не зависит от магических цитат.

$_GET, $_POST, $_COOKIE и $_REQUEST были затронуты (и их $GLOBALS аналоги).

Кроме того, изменения в GPC суперглобалах не отражаются автоматически в $_REQUEST.

Что касается суперглобальных $_FILES и $_ENV, я не могу проверить их банкомат.


Я наконец запустил этот тест и, к моему удивлению, оба $_FILES и php://input затронуты .

...