簡介
PHP 作為一種強大的語言,無論是以模組還是 CGI 的方式安裝,它的解釋器都可以在伺服器上存取檔案、運行命令以及建立網路連線等。這些功能也許會為伺服器增加許多不安全因素,但只要正確地安裝和設定 PHP,以及編寫安全的程式碼,那麼 PHP 相對於 Perl 和 C 來說,是能創造出更安全的 CGI 程式的。而且,也可以在可用性和安全性之間找到一個很好的平衡。
PHP 可能會被用在許多不同的方面,因此,PHP 內建的選項以方便使用者對其進行配置。雖然眾多的選項可以使 PHP 完成許多工作,但這些選項的設定以及對伺服器的配置很可能會產生安全性問題。
PHP 的選項與其語法一樣,具有很高的靈活性。使用 PHP,可以在只有 shell 使用者權限的環境下創建完善的伺服器端程序,或者在被嚴格限制環境下使用它來完成伺服器端包含(Server-Side Includes)而無需承接但太大的風險。如何建立這樣一種環境,其安全性如何,很大程度上取決於 PHP 的開發者。
本章以一些常規的安全建議作開頭,講述如何在不同的環境下盡可能地提高安全性,以及介紹對於不同安全級別的一些程式設計原則。
總則
絕對安全的系統是不存在的,因此安全業界常用的方法有助於平衡可用性和風險。對使用者提交的每一個變數都進行雙重驗證可能是一個很負責任的行為,但會導致使用者必須花很多時間去填寫一張複雜無比的表格,從而迫使某些使用者嘗試繞過安全機制。
最好的安全機制應該能在不防礙用戶,並且不過度增加開發難度的情況下做到能滿足需求。實際上,一些安全問題往往會發生在這種過度強化安全機制的系統上。
不要忘記著名的等強原則:一個系統的強度是由它最薄弱的環節決定的(相當於木桶原理)。如果所有的事務都基於時間、地點、事務種類進行詳細的記錄,而用戶驗證卻只依靠一個 cookie,那麼用戶所對應的事務記錄的可信度就被大大剝弱了。
調試程式碼的時候一定要記住,就算是一個簡單的頁面也很難對所有可能發生的情況進行檢測:對你不滿的僱員不一定會輸入如你所願的東西,黑客也有足夠的時間研究你的系統,當然,你的寵物貓也會跳到你的鍵盤上。這就是為什麼必須檢查所有的程式碼,去發現哪裡可以引入不正當的數據,然後對程式碼改進、簡化或增強。
網路上充滿了為了成名而破壞你的程式碼、攻擊你的網站並輸入不正當資料的人,總之他們會使你的生活充滿樂趣。無論是大網站還是小網站,只要能和網路連接,就會成為一個目標。許多駭客程式並不理會網站的大小,只會機械地掃描 IP 位址並找出受害者。我們希望那個不要是你。