2016-03-24 1 views
0

Я использую извлечение, чтобы получить все значения формы, отправленные POST, и сохранить их в разных переменных. Мое сомнение заключается в том, что при использовании функции extract() с флагом EXTR_SKIP является «лучшим способом» для предотвращения проблем с безопасностью, например (может быть?) Переписать значения формы и другие проблемы безопасности, которые я не знаю (Мои знания о безопасности в Интернете весьма ограничен)Использование extract() с флагом EXTR_SKIP для предотвращения проблем с безопасностью

+1

Почему вы хотите использовать это вместо того, чтобы иметь дело с переменной '$ _POST' как есть? – Jon

+0

@ Jon, потому что у меня много входов, и мне всегда нравится учиться самому быстрому, чтобы быть более продуктивным (очевидно, осознавая безопасность) –

+1

Это, я не верю, является решением, которое вы хотели бы для этого. 'register_globals()' был отключен автоматически по какой-либо причине. ^^ Лучше иметь дело с ним, пока он все еще находится в массивах '$ _POST' или' $ _GET'. Это также означает, что при просмотре кода вы знаете, что такое строгий пользовательский ввод, и если вы переместите его на обычную переменную, вы будете знать, если кратко взгляните, независимо от того, дезинформировали ли вы его, как хотите. – Jon

ответ

2

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

Оптимизировать для умея читать быстро, не имея возможности быстро писать.

Но если вы действительно хотите спуститься по этому маршруту:

<?php  
// Important, ONLY allow the indices you really want to support 
$whitelist = array_key_whitelist($_POST, [ 
    'foo', 
    'bar', 
    'baz', 
    'moo', 
    'usr', 
    'lol' 
]); 
// Then run extract() as expected 
extract($whitelist, EXTR_SKIP); 

И функция, конечно:

<?php 
/** 
* Only allow the whitelisted array keys to exist: 
* 
* @ref http://stackoverflow.com/a/36193403/2224584 
* @param array $input 
* @param array $allowedKeys 
* @return array 
*/ 
function array_key_whitelist(array $input, array $allowedKeys = []): array 
{ 
    $return = []; 
    foreach ($allowedKeys as $key) { 
     if (array_key_exists($key, $input)) { 
      $return[$key] = $input[$key]; 
     } 
    } 
    return $return; 
} 

Это немного безопаснее, чем extract() с EXTR_SKIP в контексте цикла, где в будущем, переменные могут не получить набор для их вменяемым если они уже определены.

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