我在使用 $_POST, $_GET, $_SERVER 等时,在 Netbeans 7.4 for PHP 上收到了这个警告信息:
不要直接访问超全局变量 $_POST 数组
这是什么意思?我该如何纠正这个警告?
编辑:事件示例代码仍显示此警告。
我在使用 $_POST, $_GET, $_SERVER 等时,在 Netbeans 7.4 for PHP 上收到了这个警告信息:
不要直接访问超全局变量 $_POST 数组
这是什么意思?我该如何纠正这个警告?
编辑:事件示例代码仍显示此警告。
filter_input(INPUT_POST, 'var_name')
可以替代 $_POST['var_name']
filter_input_array(INPUT_POST)
可以替代 $_POST
$name = filter_input(INPUT_POST, $_POST["name"]);
代码时遇到了这个警告。 - stencifilter_input(INPUT_POST,'var_name',FILTER_SANITIZE_NUMBER_INT)
。 - HoffZhttps://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new
这个新增的原因是因为超全局变量通常会被用户输入填充,而用户输入不能被盲目信任。相反,应该进行某种形式的过滤,这就是提示的作用。在处理超全局变量值时需要进行过滤,以防止其中包含有害内容。
例如,在我原来的代码中:
$_SERVER['SERVER_NAME']
filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)
您可以在此处找到filter_input和filters文档:
filter_input
替换它。不要与它一起使用。 - user2924019我同意其他回答者的观点,在大多数情况下(几乎总是)需要对您的输入进行清理。
但考虑以下代码(这是用于REST控制器的代码):
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
return $this->doGet($request, $object);
case 'POST':
return $this->doPost($request, $object);
case 'PUT':
return $this->doPut($request, $object);
case 'DELETE':
return $this->doDelete($request, $object);
default:
return $this->onBadRequest();
}
在这里应用过滤并不是非常有用的(虽然它也不会破坏任何东西)。
因此,要遵循建议,但不要盲目跟从 - 而是要理解为什么要这样做 :)
只需要使用filter_input(INPUT_METHOD_NAME, 'var_name')
代替$_INPUT_METHOD_NAME['var_name']
使用filter_input_array(INPUT_METHOD_NAME)
代替$_INPUT_METHOD_NAME
例如
$host= filter_input(INPUT_SERVER, 'HTTP_HOST');
echo $host;
替代
$host= $_SERVER['HTTP_HOST'];
echo $host;
并使用
var_dump(filter_input_array(INPUT_SERVER));
替代
var_dump($_SERVER);
这是我代码中的一部分,它在NetBeans中引发了警告:
$page = (!empty($_GET['p']))
经过大量研究和发现有无数种方法可以过滤这个数组,我找到了一种简单的方法。我的代码能够正常工作,NetBeans也很开心:
$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))