PHP是一個很容易學習的語言, 許多人在沒有任何編程背景下學習它作為一種去增加一些互動元素到他們的網站的方法. 不幸的是,這往往意味著PHP程序員,尤其是那些較新的Web開發程序員, 並沒有覺察他們網站中潛在安全風險. 這裡是一些比較常見的安全問題,以及如何去避免它們。
永遠,永遠信任你的用戶
不能說足夠的次數,你應該永遠,永遠, 信任你的用戶向你發送你期望的數據. 我聽到很多人回應,大概是"哦,沒有惡意的人將對我的網站感興趣"。這就錯了, 這裡總是有懷有惡意的用戶可以利用一個安全漏洞,問題可以很容易被發現,因為一個用戶無意中做錯了。
因此, 所有網頁的發展的戒律,我不能再壓縮了的話就是:永遠,永遠,相信你的用戶。假定你的網站從使用者收集的每片數據含有惡意代碼,始終, 你認為已經檢查客戶端驗證的這些數據,例如在JavaScript ,如果你能夠達到這個目標,你應該有了一個良好的開端。如果PHP的安全性很重要,這一點就要重要地學習,個人來說,"PHP安全"是一個重大的問題。
全局變量
在許多語言,你必須明確地設定一個變量以使用它。 在PHP中,有一個選項" , register_globals" , 你可以在php.ini中設置,讓你可以使用全局變量,而不需要事先聲明。
考慮下面的代碼:
if ($password == "my_password") {$authorized = 1;}if ($authorized == 1) {echo "Lots of important stuff.";}
許多人看上去覺得沒什麼問題,而事實上,這方面的代碼在整個網站上應用. 但是,如果一個服務器開啟"register_globals"。然後,只需添加"?authorized=1"的URL將讓任何人都看到. 這是一個最普遍的PHP的安全問題。
所幸的是,這有兩個簡單的解決辦法. 第一,也許最好的,就是把"register_globals"關閉. 二是你必須明確只有你使用變量. 在上面的例子中,這將意味著加入"?authorized=0"; 在腳本的開始:
$authorized = 0;
if ($password == "my_password") {
$authorized = 1;
}
if ($authorized == 1) {
echo "Lots of important stuff.";
}
錯誤信息
錯誤信息是一個非常有用的工具,無論是程序員和黑客. 開發者需要它們去改正錯誤. 黑客可以利用它們來找出一個網站的各種信息, 從目錄結構的服務器,數據庫登錄信息. 如果可能的話,最好是關閉所有的錯誤報告. PHP可以完成這項工作. htaccess或php.ini,設置"error_reporting" 的值改為"0" . 如果你有一個開發環境,您可以設定不同的錯誤報告級別。
1