目錄
什麼是超級全球?
$_REQUEST :安全警告的便利性
$_SESSION :跨請求管理狀態
$_COOKIE :閱讀客戶端存儲
$_SERVER :關於請求和環境的元數據
$_FILES :處理文件上傳
$_ENV$GLOBALS :環境和全球範圍
$_ENV
$GLOBALS
使用超級全局時的安全性提醒
最後的想法
首頁 後端開發 php教程 深入研究PHP超級全球:超越$ _GET'和$ _POST`

深入研究PHP超級全球:超越$ _GET'和$ _POST`

Jul 26, 2025 am 09:41 AM
PHP Variables

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`

當大多數開發人員想到PHP超級全局時,他們的思想直接跳到$_GET$_POST ,這是有充分理由的。這些是Web應用程序中形式處理和URL參數處理的工作主場。但是PHP的超級全球範圍遠遠超出了請求數據。了解完整的超級全球群體可以使您更深入了解PHP如何管理狀態,處理會話並與服務器環境進行交互。讓我們仔細看看所有超級全球群體以及如何有效,安全地使用它們。

深入研究PHP超級全球:超越$ _GET'和$ _POST`

什麼是超級全球?

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

超級全球的完整列表包括:

深入研究PHP超級全球:超越$ _GET'和$ _POST`
  • $_GET
  • $_POST
  • $_REQUEST
  • $_SESSION
  • $_COOKIE
  • $_SERVER
  • $_FILES
  • $_ENV
  • $GLOBALS

我們將超越基礎知識,並探索較少使用的基礎知識及其實際應用。


$_REQUEST :安全警告的便利性

$_REQUEST是一個合併的數組,其中包含$_GET$_POST$_COOKIE的內容(默認情況下為該順序)。這意味著,如果一個鍵存在於多個來源中,則較晚的鍵將覆蓋較早的源。

深入研究PHP超級全球:超越$ _GET'和$ _POST`
 // 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讓您在PHP中閱讀它們。

 if(isset($ _ cookie ['theme'])){
    Echo“首選主題:”。 $ _cookie ['theme'];
}

要設置cookie,請使用setcookie() (不是$_COOKIE - 僅閱讀):

 setCookie('主題','dark',time()(86400 * 30)); // 30天

安全說明:設置cookie時使用httponlysecure標誌來降低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_AGENTHTTP_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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

PHP教程
1585
276
通過參考與函數中的值傳遞變量 通過參考與函數中的值傳遞變量 Jul 26, 2025 am 09:49 AM

Passbyvaluemeansacopyofthedataispassed,sochangesinsidethefunctiondonotaffecttheoriginalvariable,asseeninCwithprimitivesorPythonwithimmutabletypes.2.Passbyreferencemeansthefunctionreceivesadirectreferencetotheoriginal,somodificationsinsidethefunctiona

使用PHP打字屬性使您的課程現代化 使用PHP打字屬性使您的課程現代化 Jul 26, 2025 am 09:49 AM

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

揭開PHP的變量變量($$ var') 揭開PHP的變量變量($$ var') Jul 25, 2025 am 04:42 AM

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

反對'全局”關鍵字的情況:清潔劑的策略 反對'全局”關鍵字的情況:清潔劑的策略 Jul 25, 2025 am 11:36 AM

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

PHP變量的生命週期:從分配到垃圾收集 PHP變量的生命週期:從分配到垃圾收集 Jul 24, 2025 pm 10:49 PM

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

PHP常數與變量:不變性指南 PHP常數與變量:不變性指南 Jul 25, 2025 pm 05:37 PM

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

`iSSET()`,`empty()`和`is_null()的細微差別用於可變驗證 `iSSET()`,`empty()`和`is_null()的細微差別用於可變驗證 Jul 24, 2025 pm 10:15 PM

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

See all articles