1什麼是安全性
所謂安全性就是保護web應用程式與網頁不會受到駭客的攻擊。有些駭客純粹是為了好玩而入侵他人的電腦,但有更多的駭客費勁心思要竊取他人電腦中的機密檔案,甚至使整台電腦癱瘓來達到他的目的。現象在網上有很多可以讓駭客使用的軟體,這些軟體多半是免費的而且簡單好用,所以一般人要攻擊您的電腦,並不是一件非常困難的事情。關鍵是您對電腦進行了什麼樣的保護?如果只是安裝了查毒軟體或者防火牆以為平安無事了,那麼您對安全性的真正意義可以說是完全不瞭解。
2 register global
從PHP4.2.0開始,php.ini的register_global選項的預設值預設為Off。當register_globals設定為On時,您的程式將可以接收來自伺服器中的各種環境變數,包括表單提交的變數,而且由於PHP不必事先初始設定變數的值,從而導致很大的安全隱患.例如HTML表單的請求變數。由於PHP不需要事先初始設定變數的值,這就會更容易寫出不安全的代碼。這是個很艱難的抉擇,但PHP社區還是決定預設關閉此選項。當開啟時,人們使用變數時確實不知道變數是哪裡來的,只能想當然。但是register_globals的關閉改變了這種代碼內部變數和用戶端發送的變數混雜在一起的糟糕情況。
3 安全模式
安全模式( safe_mode)是PHP用來限制文檔的存取、限制環境變數的存取,以及控制外部程式的執行。
由於網站伺服器是以單一系統使用者的模式在運行,因此這個系統的使用者帳號必須能夠讀取每個使用者的文檔。這表示在網站伺服器上執行的任何代碼文檔都能夠存取每個使用者的文檔。PHP的安全模式在多使用者的系統上設定一些限制選項來保障程式的安全運行。安全模式只能限制PHP的文檔,但是不能限制PHP執行的外部應用程式。因此將可執行檔應用程式放置在一個安全的檔案夾內,不要讓外部使用者執行。 啟動PHP的安全模式,將php.ini檔案的safe_mode選項(directive)設定為On:
safe_mode = On
案例1:
test.php內容如下:
當php.ini中的register_globals=Off時
訪問網址:http://localhost/test.php?authorized=1
輸出結果為:
變數沒有賦值。
當php.ini中的register_globals=On時
攻擊:
變數未初始化,可以通過url對變數賦值
輸出結果為
變數賦值
防護:
變數初始化,阻止通過url對變數賦值進行攻擊。
需將代碼改為:
案例2:
例如:test.php內容如下:
當訪問http://localhost/test.php時,
輸出:訪問者尚未登陸
攻擊:
在網址後面追加?_SESSION[username]=admin
即:http://localhost/test.php?_SESSION[username]=admin
輸出:訪問者:admin
防護:
session_start()開啟session,擷取session中的值,阻止通過url對session變數進行注入攻擊。
代碼改為
案例3:
當php.ini中的allow_url_fopen = On時
demo.php中的內容如下:
test.php中的內容為:
當訪問網址:
http://localhost/demo.php時
輸出:檔案沒有被調用。
攻擊:
在連結後面拼接?path=test.php
即:訪問http://localhost/demo.php?path=test.php
輸出:this is test.php。檔案被調用。
保護:
同上對path變數初始化。
註:
可以調用ini_get_all函數來顯示 PHP的設定值。
例如:
"; print_r(ini_get_all()); echo "
";
運行結果部分如下:
可以通過
在php檔案中修改配置