Я использую извлечение, чтобы получить все значения формы, отправленные POST, и сохранить их в разных переменных. Мое сомнение заключается в том, что при использовании функции extract() с флагом EXTR_SKIP является «лучшим способом» для предотвращения проблем с безопасностью, например (может быть?) Переписать значения формы и другие проблемы безопасности, которые я не знаю (Мои знания о безопасности в Интернете весьма ограничен)Использование extract() с флагом EXTR_SKIP для предотвращения проблем с безопасностью
0
A
ответ
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
в контексте цикла, где в будущем, переменные могут не получить набор для их вменяемым если они уже определены.
Но серьезно, это скорее код для игры в гольф, чем практика, которую вы должны сделать на самом деле.
Почему вы хотите использовать это вместо того, чтобы иметь дело с переменной '$ _POST' как есть? – Jon
@ Jon, потому что у меня много входов, и мне всегда нравится учиться самому быстрому, чтобы быть более продуктивным (очевидно, осознавая безопасность) –
Это, я не верю, является решением, которое вы хотели бы для этого. 'register_globals()' был отключен автоматически по какой-либо причине. ^^ Лучше иметь дело с ним, пока он все еще находится в массивах '$ _POST' или' $ _GET'. Это также означает, что при просмотре кода вы знаете, что такое строгий пользовательский ввод, и если вы переместите его на обычную переменную, вы будете знать, если кратко взгляните, независимо от того, дезинформировали ли вы его, как хотите. – Jon