变量的潜在安全问题

Potential security issues with variable variables

提问人:pocketg99 提问时间:3/19/2015 更新时间:3/19/2015 访问量:121

问:

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

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

这真的很方便,因为你只需要那里的行,你已经把你提交的所有东西都作为变量,但每次我使用它时,我都认为我忽略了一些东西。不小心让多个变量命名为同一个东西有点危险,但我更担心安全性。有没有办法成为这方面的漏洞?即用户用恶意名称捏造了一些表单输入?

php 变量

评论

0赞 Yoshi 3/19/2015
您的代码与register_globals过去执行的操作非常相似。该功能被删除是有充分理由的。

答:

2赞 JoeCoder 3/19/2015 #1

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

extract($_POST);

就安全问题而言,当然,每当您使用用户提交的数据时,都会存在安全问题。您希望对任何用户输入进行清理。无论您是输入局部变量还是仅使用数组,这都是正确的。extract$_POST

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

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

我建议不要这样做。