仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
目前PHP因其功能強大、入門簡單、代碼執行效率高等優點,成為了Web應用開發的流行語言。 由於使用廣泛,所以利用PHP安全性漏洞對Web網站進行的攻擊也越來越多,這給Web應用的安全帶來了嚴重威脅。 對網站的安全負有直接責任的主要有兩類人員:一類是網站開發人員;一類是網站管理人員。 本文筆者就從網站開發的角度,對PHP安全性漏洞的防範進行了較為全面的總結、研究。
對以往大量攻擊案例的研究表明,PHP安全性漏洞的產生原因主要是沒有對使用者的輸人進行嚴格的驗證和對系統的輸出沒有進行適當的轉義。 使用者的輸入永遠是不可以盲目相信的,在沒有進行驗證前,都可以認為是被污染資料。 系統的愉出在沒有適當轉義前,也有可能帶來較大的安全風險。
1、未對使用者輸入進行嚴格驗證產生安全性漏洞及其防範
考慮一個系統的登錄驗證,此系統要求用註冊時所填的郵箱和密碼登錄。 一般情況下,只要輸入正確即可登錄,如果輸人錯誤則不允許登錄,這是通常的處理流程。 其程式實現一般是,通過一個登錄表單獲取使用者輸入的郵箱和密碼,然後傳遞給程式以構造一個SQL查詢語句,例如:select count(*)from users where email='myemail@163.com'and password='mypass',再將此SQL語句提交給後臺資料庫執行,若返回的記錄數為0,則說明輸人的郵箱資訊或密碼有誤或使用者根本沒有註冊,系統拒絕其登錄,反之則為合法使用者,允許其登錄。 這套驗證流程對於一般的客戶是十分奏效的,其若沒有註冊亦或沒有袖人正確的郵箱和密碼都是不能登錄系統的。 但對於駭客來說,情況就不一樣了。 其完全可以精心設計一個字串來代替合法郵箱位址從而繞過系統的驗證,例如:若駭客輸人的郵箱位址是「myemail"orI=I--"、密碼是"myppass",此時SQL語句變為select count(*)from users wherer email='myemail' or I=I--" and password='mypass' ,此語句執行後所返回的記錄數是users表的所有記錄總數,並不為0,所以通過了系統的登錄驗證,系統允許其登錄。 這就是著名的SQL注入攻擊。 導致這個後果的原因是駭客精心構造了一個字串用於代替合法郵箱位址且系統並未對使用者輸入的資料本身進行合法性檢查。
為了對上述PHP安全性漏洞進行防範,我們可以對使用者的輸人進行合法性驗證。 此處要求入的是郵箱位址,為了對使用者輸入的資料本身進行合法性檢查,我們可以用正則運算式對使用者輸人的郵箱位址進行驗證,看是否符合正確的郵箱格式,這樣就可以大大增加駭客設計特殊字元串的難度,在一定程度上防止SQL注人漏洞的產生。
在任何悄況下,如果對使用者的輸人均進行嚴格的驗證,當然,驗證方法根據不同情況而有所不同,並不局限于正則運算式,這就可以在很大程度上對PHP安全性漏洞進行防範。
2、未對系統的輸出進行適當轉義產生安全性漏洞及其防範
未對系統的輸出進行適當轉義也會產生安全性漏洞,跨站腳本漏洞就是一個很著名的例子。 假設有一個可以發表評論的系統,其採用表單的形式進行資料提交。 對於一般使用者,這不會有什麼太大間題,但是對於駭客,問題就來了。 因為駭客並不是真的想發表什麼評論,其有可能是想盜取其他登錄使用者的cookies。 為了盜取其他錄使用者的cookies, 黑可以將javascript代碼作為評論內容進行提交。
如果在輸出前對駭客所提交的內容不做任何轉義的話,那麼lavascript代碼將被其他使用者的瀏覽器所執行,從而將流覽評論的其他登錄使用者的cookies資訊發送到駭客手上。 為了防範上述跨站腳本漏洞攻擊,我們所要採取的措施很簡單:在將評論內容輸出到用戶端瀏覽器之前,利用htmlentities()函數對輸出內容進行轉義。 此函數可以將輸出內容當中可能包含的html標籤轉換成html實體,從而使得駭客輸入的JAVAscript代碼不被執行。
任何情況下,對於系統的輸出都應該進行適當的轉義(轉義方法根據不同情況而有所不同,並不局限于htmlentities()函數),這樣才不會讓駭客有機可乘。
聲明:本文由鄭州批發市場:HTTP://www.shun-e.com/market/ 原創投稿,尊重他人成果,轉載請注明出處!