簡體   English   中英

Netbeans 7.4 for PHP 上的警告“不要直接訪問超全局 $_POST 數組”

[英]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 和過濾器文檔在這里:

http://www.php.net/manual/en/function.filter-input.php

http://www.php.net/manual/en/filter.filters.php

我同意其他回答者的意見,在大多數情況下(幾乎總是)有必要對您的輸入進行消毒。

但請考慮這樣的代碼(它用於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM