簡體   English   中英

“不要直接訪問Superglobal $ _REQUEST數組。”Netbeans 8.0 PHP

[英]“Do not Access Superglobal $_REQUEST Array Directly.” Netbeans 8.0 PHP

在閱讀了其他幾個問題后,我們會問這個問題。

不要直接訪問超全局$ _GET數組

在Netbeans 7.4 for PHP上“不要直接訪問Superglobal $ _SERVER數組”

為什么filter_input()不完整?

我已經加載了最新版本的Netbeans 8.0 ,我看到了一個警告

不要直接訪問Superglobal $ _REQUEST數組。

太棒了,我很高興在我做一些可以改進的事情時被展示出來,所以我看一下hints

這個建議很簡單。

請改用一些過濾函數(例如filter_input(),帶有_ *()函數的條件等)。

所以我開始研究fliter_input()但是它還沒有為$_REQUEST實現。 這似乎有點死路一條。

然后我讀了一些非常有用的東西(@bobince)“ 在你的腳本開始過濾時,你不知道你的輸入最終會在哪里,所以你不知道如何逃避它。

它提醒我,我確切地知道我的輸入最終會在哪里,以及它將用於什么。 所以,我想問每個人我將采取的方法是否基本safe

我正在設計一個REST- ish API,我正在使用$_SERVER['REQUEST_METHOD']; 確定需要返回的資源。 我也在使用$_REQUEST['resource']; .htaccess rewrite之后/api/之后應包含URI上的所有內容。

我對我的方法的問題是:

  1. 如果我總是驗證$_SERVER['REQUEST_METHOD']; 要在所需的GET PUT POST DELETE (我還是需要做)之內,是否真的有問題沒有過濾輸入?
  2. 我應該訪問$_REQUEST['resource']; 通過使用filter_input (INPUT_GET, 'resource'); 當這只用於確定資源,以及無法確定資源的地方(比如有人試圖添加惡意代碼)時,我們將找不到資源並返回404 Not Found狀態。
  3. 我是否需要考慮其他因素,並且錯過了我理解中的任何重要事項?

我意識到,對於僅被視為警告的內容,這看起來似乎很多,但是根據我的經驗,修復錯誤會給你工作代碼 ,但修復警告將幫助你理解代碼的工作原理

所以我開始研究fliter_input()但是它還沒有為$_REQUEST實現。 這似乎有點死路一條。

我會說這不是死路一條,而是故意的。 filter_input()要求您清楚地指定輸入類型。 $_REQUEST不清楚它,它包含來自各種來源的輸入,允許一個源覆蓋另一個。

除此之外,這也不是警告確實要告訴你的。 使用像filter_input(INPUT_GET, ...)這樣的超全局函數交換像$_GET的超全局顯示了相同的設計缺陷。 但Netbeans不能輕易地警告你。

擺脫超級全球已經是一個好主意。

相反,在低級別的位置將輸入數據注入應用程序,例如,引導請求信息,不要在代碼的其余部分使用任何超級全局和filter_input函數。

這將允許您輕松模擬任何請求方法,甚至沒有實際請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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