我使用extract来获取POST发送的表单的所有值,并将它们保存在不同的变量中。 我怀疑的是,使用带有标志EXTR_SKIP的extract()是防止安全问题的“最佳方式”,例如(可能?)覆盖表单的值以及我不知道的其他安全问题(我对Web安全的了解是非常有限)
答案 0 :(得分:3)
我有很多投入,我总是喜欢学习最快的方法,提高工作效率(显然意识到安全性
优化能够快速阅读,无法快速写入。
但如果你真的想沿着这条路走下去:
<?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
稍微安全一些,如果已经定义了变量,将来可能不会将变量设置为他们的理智值。
但严重的是,这更像是一个代码高尔夫球场,而不是你应该实际跟随的练习。