計算機軟件

在功能PHP全局變量。 使PHP的全局變量

要創建一個完整的網站,你需要知道很多具有廣泛的功能。 但是,什麼可以讓他真正獨一無二的 - 它是PHP。 在編程語言中的全局變量是不是經常使用,但有時知道它是如何工作的,有時是必要的。 這是它是什麼,它是如何工作的,我們將在這篇文章中做研究。

範圍

所以在其中調用變量和確定的環境。 在大多數情況下,他們只有一個範圍。 當PHP全局變量從其它文件加載,那麼它可能是包容性(包括)和所需的(要求)。

默認情況下,他們被限制在局部函數範圍內。 如何使可變看到文件在其邊界,這可能更多使用? 為此,並且在PHP全局變量提供。

關鍵字“全局”

這裡是如何聲明一個全局變量到PHP? 在實現這一目標將幫助我們的“全球化”。 這是必要的,你想一個全球性的(narimer,全球«變量“)的變量前面放置。

這樣的指示實施後,數據將能夠與任何文件中工作。 如果某個地方有這個變量的引用,程序將始終對全球版本的注意。

為什麼這麼奇怪的語言嗎? 事實上,在同一時間有可能是本地版本。 但他們會專供在那裡公佈這些文件。 而對於所有其餘的將採取行動的全局變量的PHP類。 所以你一定要小心。 而且毫無疑問,這裡有他們的樣子的例子:全球一。

因為如果一個文件將有機會獲得一些變數,這將導致他們發生衝突。 但是,我們不能肯定地說 - 局部或全局變量被讀取或完全失敗。 因此,如果是在一個函數來註冊,應該是沒有問題的。 但利用其邊界的變量是有問題的。 因此,有必要嚴密監控,確保代碼的起草結構無處是那裡甚至到了說,衝突的前提條件出現。

記錄的另一實施例

是否有可能在PHP創建以另一種方式的全局變量? 是的,連一個也沒有。 首先,讓我們考慮$ GLOBALS。 這是一個關聯數組。 它的關鍵 - 這個名字。 As的含量的值作為一個全局變量。 應當指出的是,消息公佈後陣列中的任何範圍存在。 這使人們有理由相信超全局。 它看起來如此:$ GLOBALS ['變量']。

預定義/超全局

在每一個編程語言也有一些是包租它的一些功能名稱。 因此,在PHP中創建全球相同的名稱將無法工作的變量。

這種編程語言都有自己的特點。 因此,重要的是,這裡的預定義變量不安裝“超級”,也就是說,他們並非在所有地區提供。 我怎樣才能解決這個問題? 預定義變量是可以在一些局部區域,它必須聲明如下:全球«變量“ 這似乎是和以前一樣叫吧? 這是事實,但並不完全。 讓我們來看看已經“打”的例子:

  • 全球$ HTTP_POST_VARS;
  • 迴聲$ HTTP_POST_VARS ['名']。

你覺得他們之間有什麼區別? 請注意,在PHP的全局變量不一定要在函數中使用。 它甚至可以被放置在被包含在它的文件。

鏈接和安全

正如你所看到的,在PHP創建一個全局變量是沒有問題的。 但是它有什麼特別的相對鏈接? 是的,全球使用時可能會有意外的行為。 但在此之前,有一點背景故事。

在4.2.0版本默認了register_globals指令改變從狀態為關閉。 對於大多數用戶來說,這不是很重要,但不成功。 畢竟,它直接影響到開發的產品的安全性。 如果您需要使變量全球性的,在這個參數上的PHP指令沒有受到直接影響。 但是,不正確的使用已經可以創造先例的安全性。

所以,如果register_globals的開啟,前編寫的代碼的執行初始化需要的是不同的變量,例如發送HTML表單。 因此,我們決定將其關閉。

為什麼是這個指令在PHP的全局變量的狀態欠多少? 事實是,當開發商的狀態並不總是肯定可以自己回答它是從哪裡來的問題。 在一方面,它更容易編寫代碼。 但另一方面 - 這是一個安全隱患。 因此,為了避免錯誤,以及混合數據和指令已被禁用。

現在,讓我們來看看不/安全碼,以及如何檢測在全局PHP變量的聲明在篡改數據是伴隨著嘗試的情況。 這是必要的,以創建不僅美觀,而且還不斷的工作沒有破解的第一個可用的人的網站。

惡意代碼

讓我們設置變量是那些誰被授權的情況:

如果(的authenticate_user()){
$授權= TRUE;
}

如果($授權){
包括“/highly/sensitive/data.php”;
}

在這種狀態下,變量可以被自動設定。 考慮到數據可以簡單地更換,並且其原籍源沒有設置,那麼任何人都可以通過這樣的測試,假裝是別人。 如果需要的話,攻擊者(或只是好奇,但沒有經驗的人)可能被削弱,我們的邏輯。

如果我們改變了指令的值,該代碼將正常工作,因為我們需要的。 但是變量的初始化不僅在編程一個很好的基調,也給我們帶來了腳本的穩定性有一定的保證。

可靠版本的代碼

您可以關閉或工作指令,或規定一個更複雜的代碼來實現這一目標。 例如,像這樣:

如果(isset($ _ SESSION ['名'])){

迴聲“你好的 {$ _ SESSION [”用戶名“]} ”;

}其他{

迴聲“你好的旅客
”;
迴聲“歡迎用戶!”

}

在這情況下,替換,會有困難。 不過還是 - 可能。 要做到這一點,你必須採取的是提供了快速反應工具照顧。 如果你想在PHP中的全局變量,你可以使用以下工具:如果我們知道的範圍是什麼得到的值,就可以註冊一個腳本,用火柴進行檢查。 當然,這也並不能保證對替代值完全保護。 但是,太多的選擇顯著複雜化。

查找試圖偽裝

讓我們來看看您了解如何早期寫的。 在PHP函數中的全局變量,將在下文中給出,你將需要聲明自己。 我們可以說,這是關於課程的話題同化是一種功課。 下面是代碼:

<?PHP的
如果(isset($ _ COOKIE ['C_COOKIE'])){
} ELSEIF(isset($ _ GET ['C_COOKIE'])|| isset($ _ POST ['C_COOKIE'])){

電子郵件(“administrarot@example.com”,“注意,腳本記錄企圖盜竊和篡改數據”,$ _ SERVER ['REMOTE_ADDR']);
echo“這裡是一個破碎的安全或試圖這樣做通知管理員。”
退出;

}其他{
}
?>

現在,此解釋。 天色C_COOKIE來到我們從可靠的來源。 要根據預期的結果完全滿意,我們檢查它的價值,在出現問題時通知管理員。 如果不來的話沒有行動,也沒有需要做。 你必須明白,簡單地禁用了register_globals指令不會使你的代碼是安全的。 因此,從用戶接收的腳本的任何變量,應檢查的預期值。

結論

在此,一般而言,一切你需要了解全局變量在工作中成功地和安全地使用它們。 當然,說有沒有人會使用它們不能了充分的保證 - 攻擊者都在不斷完善自己的方法和技巧。 因此,希望限制在代碼中的最大使用全局變量。 幸運的是,這種編程語言的結構和設計特點可以實現這一目標。 祝你好運!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhtw.delachieve.com. Theme powered by WordPress.