2015-07-25 1 views
1

Дилемма исходит из системы плагинов, в которой мы пытаемся внедрить процедуры безопасности, которые ограничивают плагин использованием только данных, которые наша система передает на него.PHP ограничивает доступ к суперглобалам или перемещает переменные данные

Опасность исходит от паролей или других конфиденциальных данных, которые могут присутствовать в $ _POST или других глобальных переменных.

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

$tmpPost = $_POST; 
$_POST = []; 
pluginCall(); 
$_POST = $tmpPost; 
unset($tmpPost); 

Проблема, которую я предвижу эффективности и использования памяти. Как насчет страниц с большими объемами входных данных, таких как загрузка файлов? Мы бы удвоить использование памяти сценария (и я предполагаю, что добавление времени загрузки) копирование данных в другой переменный с:

$tmpPost = $_POST; 

Так моя дилемма и вопрос:

Есть Есть способ ограничить доступ к суперглобалам и/или есть ли способ переназначить переменную без ее копирования (по существу, переход)?

+0

Обычный случай скорее всего будет заключаться в том, что вы «доверяете» своим плагинам - так каковы обстоятельства здесь, которые делают это не заданным? Может быть, это скорее вариант, позволяющий плагину в другом контексте выполнения как-то ...? Но это может зависеть от особенностей системы и того, какую работу/цель должны использовать плагины. – CBroe

+2

как насчет 'file_get_contents ('php: // input');'? – ArtisticPhoenix

+0

Вы можете настроить PHP ini только заполнять суперглобалы, когда это необходимо, а затем читать с входного пара. – AnotherGuy

ответ

0

Я не боюсь угадать!

Угадай, но если вы перешли от $ _POST к системе, которая использует filter_input_array(INPUT_POST, ...), вам даже не понадобится суперглобальное вообще (потому что эта функция не использует $ _POST для получения внешних источников массива). Вы можете очистить $_POST, а filter_input_array() доставит вам все нужные вам значения. Затем, как вы полагаете, вам действительно нужно будет указать ваш плагин на правильный ввод.

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

$_POST = []; 

$this->filteredInputArray = filter_input_array(INPUT_POST, $filterDefinition); 

Я не пробовал эту точную последовательность, но это может стоить того.