【发布时间】:2012-01-16 14:52:23
【问题描述】:
我正在检查我的脚本是否存在漏洞,并且对我过去的做法感到震惊,这是非常不安全的:
foreach ($_GET as $key => $value){
$$key = $value;
}
或更短
extract( $_GET );
我用 firebug 更改了一些 POST/GET 变量以匹配我在脚本中使用的名称。 如果名称猜对了,它们可以被覆盖。
所以我想我必须像这样单独命名: $allowed_vars =
$allowed_vars = array("time","hotfile","netload","megaupload","user","pfda","xyz","sara","amount_needed");
foreach ($_GET as $key => $value)
{
if (in_array($key,$allowed_vars))
{
$$key = $value;
}
}
这种方式比单独命名它们节省了一些时间。
为此必须使用什么样的自动化?
【问题讨论】:
-
为什么必须首先将它们分配给单个变量?就不能用
$_GET[ 'time' ]之类的吗? -
仅供参考,您将
$allowed_vars放在 foreach 之外,没有理由每次都设置它 -
@Juahana 1. 易于使用,2. 防止逃逸。只是编码风格,这里不是真正的问题
-
@ben 好点。改正了
-
防止转义?这是什么?