可变变量的潜在安全问题


Potential security issues with variable variables

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

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

这真的很方便,因为你只需要这些行,而且你已经把所有提交的东西都作为变量,但每次我使用它时,我都认为我忽略了一些东西。意外地将多个变量命名为同一个对象有点危险,但我更担心安全性。在这方面,这是否会成为一个弱点?即用户使用恶意名称伪造某些表单输入?

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

extract($_POST);

至于安全问题,当然,无论何时使用用户提交的数据都会有安全问题。您希望清除任何用户输入。无论您是将extract作为局部变量的输入,还是仅使用$_POST数组,这都适用。

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

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

我建议不要这样做。