深入研究PHP超級全球:超越$ _GET'和$ _POST`
php超級全局包括$ _get,$ _post,$ _request,$ _session,$ _cookie,$ _server,$ _server,$ _files,$ _env和$ globals,每種都提供獨特的目的,而不僅僅是處理表單數據;它們啟用狀態管理,服務器交互和環境訪問。 1。 $ _request結合$ _get,$ _ post和$ _cookie,但由於輸入源歧義而構成安全風險,因此除非必要,否則應避免使用。 2。 $ _Session在調用session_start()之後,通過請求維護用戶狀態,安全性最佳實踐,包括避免敏感數據存儲和使用session_regenerate_id()後 - login後阻止固定攻擊。 3。 $ _cookie讀取客戶端cookie,而setCookie()將它們設置為httponly,secure和samesite標誌,以保護XSS和MITM攻擊。 4。 $ _SERVER提供請求和環境元數據,例如request_method,remote_Addr和http_user_agent,但是諸如HTTP_REFERER和HTTP_USER_AGENT之類的值不應被信任,因為它們是可欺騙的。 5。 $ _FIELS通過訪問臨時文件數據,需要錯誤檢查,MIME類型驗證和安全存儲在Web根部之外以防止執行風險來處理文件上傳。 6。 $ _env如果在php.ini中啟用了環境變量,儘管現代應用程序通常使用專用加載程序的.env文件。 7。 $ GLOBALS暴露了所有全局變量,主要用於調試或修改功能中的全局狀態。安全性最佳實踐包括使用已準備好的SQL查詢的陳述驗證和消毒來自超級全局的所有輸入,使用HTMLSpeceialChars()逃脫輸出以防止XSS,並且永遠不會將超級全球數據視為可信賴,從而確保可靠和安全的PHP應用程序。
當大多數開發人員想到PHP超級全局時,他們的思想直接跳到$_GET
和$_POST
,這是有充分理由的。這些是Web應用程序中形式處理和URL參數處理的工作主場。但是PHP的超級全球範圍遠遠超出了請求數據。了解完整的超級全球群體可以使您更深入了解PHP如何管理狀態,處理會話並與服務器環境進行交互。讓我們仔細看看所有超級全球群體以及如何有效,安全地使用它們。

什麼是超級全球?
超級全局是內置的PHP變量,無論範圍如何,它們總是可訪問的。您可以在腳本中的函數,類或任何地方使用它們,而無需全球化。它們以$
和下劃線(例如$_GET
開頭,並由PHP預定。
超級全球的完整列表包括:

-
$_GET
-
$_POST
-
$_REQUEST
-
$_SESSION
-
$_COOKIE
-
$_SERVER
-
$_FILES
-
$_ENV
-
$GLOBALS
我們將超越基礎知識,並探索較少使用的基礎知識及其實際應用。
$_REQUEST
:安全警告的便利性
$_REQUEST
是一個合併的數組,其中包含$_GET
, $_POST
和$_COOKIE
的內容(默認情況下為該順序)。這意味著,如果一個鍵存在於多個來源中,則較晚的鍵將覆蓋較早的源。

// if? name =愛麗絲在URL中,表單帖子名稱= bob echo $ _request ['name']; //輸出“鮑勃”
為什麼會冒險:因為$_REQUEST
從多個輸入來源提取,因此如果不仔細過濾,它可以使您的應用程序不那麼可預測,並且更容易受到注入攻擊。
?最佳實踐:避免$_REQUEST
除非您特別需要輸入 - 不合時宜的處理。更喜歡$_GET
或$_POST
,以明確說明數據的來源。
$_SESSION
:跨請求管理狀態
HTTP是無狀態的,但是$_SESSION
有助於在頁面上維護用戶狀態。它將數據存儲在服務器上,並通過會話ID(通常存儲在cookie中)將其與用戶關聯。
session_start(); $ _session ['user_id'] = 123; $ _session ['logged_in'] = true;
要點:
- 在訪問
$_SESSION
之前,請務必致電session_start()
。 - 會話數據一直存在,直到會話被破壞或到期為止。
- 切勿在會話中存儲像密碼這樣的敏感數據,而僅存儲標識符。
?安全提示:使用session_regenerate_id()
登錄後再生會話ID,以防止會話固定攻擊。
$_COOKIE
:閱讀客戶端存儲
cookie是存儲在客戶端上的小數據。 $_COOKIE
讓您在PHP中閱讀它們。
if(isset($ _ cookie ['theme'])){ Echo“首選主題:”。 $ _cookie ['theme']; }
要設置cookie,請使用setcookie()
(不是$_COOKIE
- 僅閱讀):
setCookie('主題','dark',time()(86400 * 30)); // 30天
?安全說明:設置cookie時使用httponly
並secure
標誌來降低XSS和MITM風險:
setCookie('session_id',$ token,[ '到期'=> time()3600, '路徑'=>'/',, 'secure'=> true, 'httponly'=> true, 'samesite'=>'嚴格' );
$_SERVER
:關於請求和環境的元數據
該超級全局擁有有關標題,路徑和服務器設置的信息。它是僅讀取的,由Web服務器填充。
常見的有用鍵:
-
$_SERVER['REQUEST_METHOD']
- 獲取,發布,等等。 -
$_SERVER['HTTPS']
- 檢查連接是否安全 $_SERVER['REMOTE_ADDR']
- 客戶端IP地址$_SERVER['HTTP_USER_AGENT']
- 瀏覽器信息$_SERVER['SCRIPT_NAME']
- 當前腳本路徑$_SERVER['HTTP_REFERER']
- 上一頁(注意拼寫錯誤)
if($ _server ['request_method'] ==='post'){ //過程表格 }
⚠️謹慎:永遠不要相信$_SERVER
盲目的值。可以欺騙HTTP_USER_AGENT
和HTTP_REFERER
。將它們用於記錄或分析,而不是身份驗證。
$_FILES
:處理文件上傳
當表單使用enctype="multipart/form-data"
時,可以在$_FILES
中獲得上傳的文件。
一個典型的文件上傳數組看起來像:
$ _files ['avatar'] = [ 'name'=>'photo.jpg', 'type'=>'image/jpeg', 'tmp_name'=>'/tmp/php/php58ut12', '大小'=> 98123, '錯誤'=> 0 ];
移動上傳的文件:
if($ _files ['avatar'] ['error'] === upload_err_ok){ $ tmp_name = $ _files ['avatar'] ['tmp_name']; $ upload_dir ='uploads/'; move_uploaded_file($ tmp_name,$upload_dir。basename($ _ files ['avatar'] ['name'])); }
✅最佳實踐:
- 始終首先檢查
$_FILES['field']['error']
。 - 使用
mime_content_type()
或fileInfo驗證文件類型,而不僅僅是擴展名。 - 將上傳存儲在Web根部之外或限制直接訪問。
$_ENV
和$GLOBALS
:環境和全球範圍
$_ENV
包含傳遞給PHP的環境變量。默認情況下通常為空,除非php.ini
中的variables_order
包括'e'。
echo $ _env ['db_host'] ?? “ localhost”;
大多數現代應用程序都將.env
文件與諸如vlucas/phpdotenv
之類的庫,而不是依靠$_ENV
。
$GLOBALS
腳本中所有全局變量的關聯數組。
$ a = 10; echo $ globals ['a']; // 10
它很少需要,但對於從功能內部調試或操縱全球狀態有用。
使用超級全局時的安全性提醒
-
永遠不要相信輸入:始終從
$_GET
,$_POST
,$_COOKIE
和$_SERVER
中驗證和消毒數據。 - 使用已準備好的語句:將超級全局數據插入SQL查詢時。
-
逃生輸出:使用
htmlspecialchars()
預防XS。 - 過濾文件上傳:檢查大小,輸入,並且永遠不會執行上傳的文件。
最後的想法
雖然$_GET
和$_POST
是必不可少的,但掌握全部PHP超級全局的範圍可以更好地控制您應用程序的行為,安全性和用戶體驗。從管理$_SESSION
的會話到通過$_FILES
解析上傳,每個超級全球都有一個獨特的目的。
了解何時以及如何使用它們 - 同樣重要的是,如何不濫用它們 - 是成熟的PHP開發人員的標誌。
基本上,將所有超級全球數據視為不受信任的數據,您將處於正確的軌道上。
以上是深入研究PHP超級全球:超越$ _GET'和$ _POST`的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Passbyvaluemeansacopyofthedataispassed,sochangesinsidethefunctiondonotaffecttheoriginalvariable,asseeninCwithprimitivesorPythonwithimmutabletypes.2.Passbyreferencemeansthefunctionreceivesadirectreferencetotheoriginal,somodificationsinsidethefunctiona

TypedpropertiesinPHP7.4 allowdirecttypedeclarationforclassproperties,improvingreliability,IDEsupport,andcodeclarity;2.Theyenforcetypesafety,reducebugs,enablebetterautocompletion,andminimizeconstructorchecks;3.Tomigrate,useexisting@vardocblockstoaddty

變量變量通過$$var語法將一個變量的值作為另一個變量的名稱使用;2.例如當$myVar為"hello"時,$$myVar等價於$hello,並可為其賦值;3.實際應用中可用於動態處理表單數據,如用foreach遍歷$_POST並用$$key創建對應變量;4.存在可讀性差、安全風險高、破壞靜態分析等問題,尤其避免對用戶輸入使用$$;5.推薦使用數組或對象替代,如將數據存入$data數組而非創建動態變量;6.使用${$var}花括號語法可提高代碼清晰度,尤其在復雜場景中。變量變

Avoidusingtheglobalkeywordunnecessarilyasitleadstocodethatishardertotest,debug,andmaintain;instead,usefunctionparametersandreturnvaluestopassdataexplicitly.2.Replaceglobalvariableswithpurefunctionsthatdependonlyontheirinputsandproduceoutputswithoutsi

APHPvariable'slifecyclebeginswithmemoryallocationviazvalcreation,whichstoresthevalue,type,referencecount,andreferenceflag.2.Whenvariablesareassignedorshared,PHPusesreferencecountingandcopy-on-writetooptimizememoryusage,onlyduplicatingdatawhennecessar

constantscannotbechangedafterDefinition,whervariablescan; 1.VariablestArtwith $,可恢復,範圍,範圍,andidealfordynamicdata; 2.constantsusedefine(constantsusedefine ofconst,haveno $,haveno $,haveno $,atemmmutable as pemmmmmutable'esmmmmmtable,全球範圍內,全球範圍內,且forfixeDValuseLikeNunchforforfforFforforForfortorlationlation; 3.UseNforation;

ISSET()checksifavariableisdeclaredAndNotNull,returningTrueForEmptyStrings,0,'0',false和emptertyrays; useittoconfirmavariableExistSistsandHasbeEnset,sustAsAsverifyingingformInputslike $ _post $ _post $ _post ['email'emage''] 2.ementify('emplienify()
