当我使用$ _POST,$ _GET,$ _SERVER,...时,在Netbeans 7.4 for PHP上收到此消息警告。
不要直接访问Superglobal $ _POST数组
这是什么意思?我该怎么做才能纠正此警告?
编辑:事件示例代码仍然显示此警告。
当我使用$ _POST,$ _GET,$ _SERVER,...时,在Netbeans 7.4 for PHP上收到此消息警告。
不要直接访问Superglobal $ _POST数组
这是什么意思?我该怎么做才能纠正此警告?
编辑:事件示例代码仍然显示此警告。
Answers:
filter_input(INPUT_POST, 'var_name')
代替$_POST['var_name']
filter_input_array(INPUT_POST)
代替$_POST
$name = filter_input(INPUT_POST, $_POST["name"]);
。
filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
虽然有点晚,但在寻找相同问题的解决方案时遇到了这个问题,所以希望对您有帮助...
发现自己和您一样处于黑暗中。刚刚找到这篇文章,它解释了NetBeans 7.4中引入的一些新提示,包括以下内容:
https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new
之所以添加它,是因为超全局变量通常充满了用户输入,因此永远不应盲目地信任它们。相反,应该进行某种过滤,这就是提示的含义。过滤超全局值,以防其包含某些中毒内容。
例如,我有:
$_SERVER['SERVER_NAME']
我改为:
filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)
您在这里有filter_input和filter文档:
我同意其他答复者的观点,即在大多数情况下(几乎始终),有必要对您的输入内容进行清理。
但是考虑这样的代码(它是针对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);
注意:适用于所有其他超级全局变量