只要我們作好了各類操作就可在基本防止一些朋友利用網站本身的漏洞進行網站操作了,很多在php中都有的如XSS用 htmlentities()預防XSS攻擊還有sql注入可以用mysql_real_escape_string操作等。
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 應用程序的名稱、電子郵件地址、電話號碼和帳單信息的輸入中用白名單中的值驗證輸入數據。