我使用extract获取POST发送的表单的所有值,并将它们保存在不同的变量中。我怀疑使用extract()和EXTR_SKIP标志是否是防止安全问题的"最佳方法",比如(也许?)覆盖表单的值和其他我不知道的安全问题(我对网络安全的了解非常有限)
我有很多投入,我总是喜欢以最快的方式学习,以提高生产力(显然意识到的安全性
优化为能够快速阅读,而不是能够快速写作。
但如果你真的想走这条路:
<?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
稍微安全一些,在循环中,如果变量已经定义,那么将来可能不会将其设置为正常值。
但说真的,这更多的是一个代码高尔夫的细节,而不是你应该实际遵循的练习。