变量变量的潜在安全问题

时间:2015-03-19 15:09:33

标签: php variable-variables

我经常使用以下行来简化处理表单输入。

foreach($_POST as $key => $value){
    $$key = $value;
}

这非常方便,因为你只需要那些线条,并且你已经将所有提交的内容作为变量提供,但每次使用它时,我认为我忽略了一些东西。意外地将多个变量命名为同一个东西有一点危险,但我更担心安全性。在某种程度上,这会成为这方面的漏洞吗?即用户是否使用恶意名称制作某些表单输入?

1 个答案:

答案 0 :(得分:2)

首先,您可以使用extract执行此操作,无需循环:

extract($_POST);

就安全性问题而言,当然使用用户提交的数据时会出现安全问题。您希望清理任何用户输入。无论您extract是对局部变量的输入还是仅使用$_POST数组,都是如此。

有些人会争辩说,提取到局部变量会更容易忘记清理,因为在代码中稍后会清楚哪些变量是用户提交的。

将用户提交的数据导入局部变量使用户可以轻松覆盖您设置的预先存在的局部变量(除非您使用EXTR_SKIP标志)。

我建议反对这种做法。