![](/img/trans.png)
[英]“Do not Access Superglobal $_SERVER Array Directly” on Netbeans 7.4 for PHP
[英]Warning "Do not Access Superglobal $_POST Array Directly" on Netbeans 7.4 for PHP
當我使用$_POST 、 $_GET 、 $_SERVER 、...時,我在 Netbeans 7.4 for PHP 上收到了此消息警告。
不要直接訪問超全局 $_POST 數組
這是什么意思? 我能做些什么來糾正這個警告?
編輯:事件示例代碼仍顯示此警告。
filter_input(INPUT_POST, 'var_name')
而不是$_POST['var_name']
filter_input_array(INPUT_POST)
而不是$_POST
雖然有點晚了,但我在搜索相同問題的解決方案時遇到了這個問題,所以我希望它可以有任何幫助......
發現自己和你處於同樣的黑暗中。 剛剛找到這篇文章,它解釋了 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 和過濾器文檔在這里:
我同意其他回答者的意見,在大多數情況下(幾乎總是)有必要對您的輸入進行消毒。
但請考慮這樣的代碼(它用於 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
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.