一、SQL注入

SQL注入是WEB開發中常見的安全問題,也是比較嚴重的安全問題。

SQL注入發生的根本原因就是WEB頁面間傳遞參數時沒有作相應的檢查和過濾。

SQL注入的防禦方法:如果是數字參數,一定要檢查是否爲數字型,不要使用PHP的內置函數檢查,自己寫一個正則表達式;字符參數,過濾常見的SQL語句關鍵字。

PHP開發中的常見安全問題總結

二、XSS漏洞

XSS漏洞也是跟頁面參數有關的。

遵循良好的頁面代碼習慣即可防範出現XSS漏洞,即:任何頁面在接收參數時,在最開始的代碼處,先檢查參數的合法性(合法性檢查包括類型合法、安全合法、邏輯合法),對參數進行XSS過濾即可。

沒有檢查的參數,如果在網頁代碼中輸出,即會造成XSS漏洞。

PHP開發中的常見安全問題總結

三、表單輸入在經JS檢查以後必須要使用PHP再次檢查

JS檢查表單輸入是否合法,是爲了提高用戶體驗,但並不安全。JS檢查代碼是最容易繞過去的,在黑客面前基本上等於形同虛設。

總之,開發人員不能信賴前端JS對於參數的檢查或過濾。

PHP開發中的常見安全問題總結

四、避免傳遞不必要的參數

比如一篇新聞的詳情頁面的地址爲news.php?id=3&sort=5,id是該新聞的唯一標識(系統編號),sort是分類的編號。類似於這種情況,sort這個參數就是沒有必要傳遞的,因爲設計正確的數據庫中,能夠通過id=3查詢到sort=5。

傳遞不必要的參數,如果不經一致性檢查,在故意傳遞錯的參數的情況下,可以造成頁面內容顯示不合理,有的情況下還能造成“看到別人的數據”的安全問題。

五、如何避免“看到別人的數據”?

筆者記得在讀大學的時候,在學校教學系統查看成績單的時候,在網址的參數中,把自己的學號改爲其他人的學號,就能看到別人的成績單。相信不少人在各種各樣的信息系統或網站上有過類似的經歷。

這類問題的發生原因,主要是編寫程序時,把當前登錄用戶的標識,放在參數中進行傳遞,然後又未對參數的合法性或者完整性進行檢查。

避免這類問題的一般方法:用戶登錄以後,使用session存儲和獲取當前登錄用戶的唯一標識,不在頁面間進行傳遞。

PHP開發中的常見安全問題總結

綜上所述:PHP開發中的遇到的大多數常見安全問題,都是由於頁面間傳遞參數導致的,一方面儘量減少參數傳遞,能不傳就不傳,能少傳就少傳;一方面只要是傳遞參數,在接收參數的頁面,最先進行參數的各種檢查,所有檢查通過了,再讓參數進入業務函數中。

相關文章