[英]“Do not Access Superglobal $_SERVER Array Directly” on Netbeans 7.4 for PHP
[英]“Do not Access Superglobal $_REQUEST Array Directly.” Netbeans 8.0 PHP
在閱讀了其他幾個問題后,我們會問這個問題。
在Netbeans 7.4 for PHP上“不要直接訪問Superglobal $ _SERVER數組”
我已經加載了最新版本的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
上的所有內容。
我對我的方法的問題是:
$_SERVER['REQUEST_METHOD'];
要在所需的GET
PUT
POST
DELETE
(我還是需要做)之內,是否真的有問題沒有過濾輸入? $_REQUEST['resource'];
通過使用filter_input (INPUT_GET, 'resource');
? 當這只用於確定資源,以及無法確定資源的地方(比如有人試圖添加惡意代碼)時,我們將找不到資源並返回404 Not Found
狀態。 我意識到,對於僅被視為警告的內容,這看起來似乎很多,但是根據我的經驗,修復錯誤會給你工作代碼 ,但修復警告將幫助你理解代碼的工作原理 。
所以我開始研究
fliter_input()
但是它還沒有為$_REQUEST
實現。 這似乎有點死路一條。
我會說這不是死路一條,而是故意的。 filter_input()
要求您清楚地指定輸入類型。 $_REQUEST
不清楚它,它包含來自各種來源的輸入,允許一個源覆蓋另一個。
除此之外,這也不是警告確實要告訴你的。 使用像filter_input(INPUT_GET, ...)
這樣的超全局函數交換像$_GET
的超全局顯示了相同的設計缺陷。 但Netbeans不能輕易地警告你。
擺脫超級全球已經是一個好主意。
相反,在低級別的位置將輸入數據注入應用程序,例如,引導請求信息,不要在代碼的其余部分使用任何超級全局和filter_input
函數。
這將允許您輕松模擬任何請求方法,甚至沒有實際請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.