PHP包括其他任何網路程式設計語言的安全性,具體表現在本地安全性和遠程安全性兩個方面,這裡我們應該養成如下的幾個習慣確保我們的PHP程式本身是安全的。
1、 驗證使用者輸入的任何資料,保證PHP代碼的安全
這裡有一個技巧就是使用白名單,所謂白名單就是說:我們要求使用者的資料應該是這樣的,例如我們要求使用者的輸入是一個數字,我們就只檢驗這個值是否是一個數字就行了,而不必檢驗他到底是什麼——其實他有可能是個惡意指令碼。
對於這個檢驗我們不能只在用戶端的javascript進行,戰地認為JS只是為了提高來訪使用者的體驗而產生的,而不是驗證的工具。因為任何一個來訪的使用者都可能會,也有可能無意間就禁用了用戶端指令碼的執行,從而跳過這層驗證。所以我們必須在PHP的伺服器端程式上檢驗這些資料。
2、 保護資料庫的安全——對即將運行於資料庫的Sql語句進行安全性預先處理。
任何時候都要對執行前的Mysql語句,進行mysql_real_escape_string操作——該函數的用法請參考PHP手冊。諸多PHP的資料庫抽象層例如ADODB都提供了類似的方法。
3、 不要依賴不該依賴的PHP設定——環境有時候不可靠
不依賴,magic_quotes_gpc=On,在程式編製的過程,盡量關閉這個配置選項,任何時候判斷這個選項後再對使用者輸入的資料進行處理。切記——PHP v6 中將會刪除這個選項。盡量在合適的時候使用addcslashes 系列函數——請參考手冊
4、 驗證資料來源,避免遠端資料表單提交
不要使用$_SERVER['HTTP_REFERER']這個超級變數來檢查資料的來源地址,一個很小的菜鳥駭客都會利用工具來偽造這個變數的資料,儘可能利用Md5,或者rand等函數來產生一個令牌,驗證來源的時候,驗證這個令牌是否匹配。
5、 保護會話資料,特別是Cookies
Cookie是儲存在使用者的電腦上的,儲存之後任何使用者都有可能出於某種原因更改他,我們必須對敏感性資料進行加密處理。Md5、sha1都是個不錯的加密方法。
6、 利用htmlentities()預防XSS攻擊
對使用者可能輸入指令碼語言的地方的資料進行htmlentities()操,將多數可以產生程式錯誤的使用者輸入進行實體化。記住要遵循第一個習慣:在 Web 應用程式的名稱、電子郵件地址、電話號碼和帳單資訊的輸入中用白名單中的值驗證輸入資料。