提问人:pocketg99 提问时间:3/19/2015 更新时间:3/19/2015 访问量:121
变量的潜在安全问题
Potential security issues with variable variables
问:
我经常使用以下行来简化表单输入的处理。
foreach($_POST as $key => $value){
$$key = $value;
}
这真的很方便,因为你只需要那里的行,你已经把你提交的所有东西都作为变量,但每次我使用它时,我都认为我忽略了一些东西。不小心让多个变量命名为同一个东西有点危险,但我更担心安全性。有没有办法成为这方面的漏洞?即用户用恶意名称捏造了一些表单输入?
答:
2赞
JoeCoder
3/19/2015
#1
首先,您可以使用提取
来执行此操作,无需循环:
extract($_POST);
就安全问题而言,当然,每当您使用用户提交的数据时,都会存在安全问题。您希望对任何用户输入进行清理。无论您是输入局部变量还是仅使用数组,这都是正确的。extract
$_POST
有些人会争辩说,提取到局部变量会更容易忘记清理,因为在代码的后面不太清楚哪些变量是用户提交的。
通过将用户提交的数据引入局部变量,用户可以轻松覆盖您设置的预先存在的局部变量(除非您使用该标志)。EXTR_SKIP
我建议不要这样做。
评论
register_globals
过去执行的操作非常相似。该功能被删除是有充分理由的。