當(dāng)前位置:首頁 >  站長 >  建站經(jīng)驗 >  正文

如何從網(wǎng)站開發(fā)角度提高php安全漏洞的防范

 2014-03-21 10:30  來源: A5專欄   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

目前PHP因其功能強大、入門簡單、代碼執(zhí)行效率高等優(yōu)點,成為了Web應(yīng)用開發(fā)的流行語言。由于使用廣泛,所以利用PHP安全漏洞對Web網(wǎng)站進行的攻擊也越來越多,這給Web應(yīng)用的安全帶來了嚴重威脅。對網(wǎng)站的安全負有直接責(zé)任的主要有兩類人員:一類是網(wǎng)站開發(fā)人員;一類是網(wǎng)站管理人員。本文筆者就從網(wǎng)站開發(fā)的角度,對PHP安全漏洞的防范進行了較為全面的總結(jié)、研究。

對以往大量攻擊案例的研究表明,PHP安全漏洞的產(chǎn)生原因主要是沒有對用戶的輸人進行嚴格的驗證和對系統(tǒng)的輸出沒有進行適當(dāng)?shù)霓D(zhuǎn)義。用戶的輸入永遠是不可以盲目相信的,在沒有進行驗證前,都可以認為是被污染數(shù)據(jù)。系統(tǒng)的愉出在沒有適當(dāng)轉(zhuǎn)義前,也有可能帶來較大的安全風(fēng)險。

1、未對用戶輸入進行嚴格驗證產(chǎn)生安全漏洞及其防范

考慮一個系統(tǒng)的登錄驗證,此系統(tǒng)要求用注冊時所填的郵箱和密碼登錄。一般情況下,只要輸入正確即可登錄,如果輸人錯誤則不允許登錄,這是通常的處理流程。其程序?qū)崿F(xiàn)一般是,通過一個登錄表單獲取用戶輸入的郵箱和密碼,然后傳遞給程序以構(gòu)造一個SQL查詢語句,例如:select count(*)from users where email='myemail@163.com'and password='mypass',再將此SQL語句提交給后臺數(shù)據(jù)庫執(zhí)行,若返回的記錄數(shù)為0,則說明輸人的郵箱信息或密碼有誤或用戶根本沒有注冊,系統(tǒng)拒絕其登錄,反之則為合法用戶,允許其登錄。這套驗證流程對于一般的客戶是十分奏效的,其若沒有注冊亦或沒有袖人正確的郵箱和密碼都是不能登錄系統(tǒng)的。但對于黑客來說,情況就不一樣了。其完全可以精心設(shè)計一個字符串來代替合法郵箱地址從而繞過系統(tǒng)的驗證,例如:若黑客輸人的郵箱地址是“myemail"orI=I--"、密碼是"myppass",此時SQL語句變?yōu)閟elect count(*)from users wherer email='myemail' or I=I--" and password='mypass' ,此語句執(zhí)行后所返回的記錄數(shù)是users表的所有記錄總數(shù),并不為0,所以通過了系統(tǒng)的登錄驗證,系統(tǒng)允許其登錄。這就是著名的SQL注入攻擊。導(dǎo)致這個后果的原因是黑客精心構(gòu)造了一個字符串用于代替合法郵箱地址且系統(tǒng)并未對用戶輸入的數(shù)據(jù)本身進行合法性檢查。

為了對上述PHP安全漏洞進行防范,我們可以對用戶的輸人進行合法性驗證。此處要求入的是郵箱地址,為了對用戶輸入的數(shù)據(jù)本身進行合法性檢查,我們可以用正則表達式對用戶輸人的郵箱地址進行驗證,看是否符合正確的郵箱格式,這樣就可以大大增加黑客設(shè)計特殊字符串的難度,在一定程度上防止SQL注人漏洞的產(chǎn)生。

在任何悄況下,如果對用戶的輸人均進行嚴格的驗證,當(dāng)然,驗證方法根據(jù)不同情況而有所不同,并不局限于正則表達式,這就可以在很大程度上對PHP安全漏洞進行防范。

2、未對系統(tǒng)的輸出進行適當(dāng)轉(zhuǎn)義產(chǎn)生安全漏洞及其防范

未對系統(tǒng)的輸出進行適當(dāng)轉(zhuǎn)義也會產(chǎn)生安全漏洞,跨站腳本漏洞就是一個很著名的例子。假設(shè)有一個可以發(fā)表評論的系統(tǒng),其采用表單的形式進行數(shù)據(jù)提交。對于一般用戶,這不會有什么太大間題,但是對于黑客,問題就來了。因為黑客并不是真的想發(fā)表什么評論,其有可能是想盜取其他登錄用戶的cookies。為了盜取其他錄用戶的cookies, 黑可以將javascript代碼作為評論內(nèi)容進行提交。

如果在輸出前對黑客所提交的內(nèi)容不做任何轉(zhuǎn)義的話,那么lavascript代碼將被其他用戶的瀏覽器所執(zhí)行,從而將瀏覽評論的其他登錄用戶的cookies信息發(fā)送到黑客手上。為了防范上述跨站腳本漏洞攻擊,我們所要采取的措施很簡單:在將評論內(nèi)容輸出到客戶端瀏覽器之前,利用htmlentities()函數(shù)對輸出內(nèi)容進行轉(zhuǎn)義。此函數(shù)可以將輸出內(nèi)容當(dāng)中可能包含的html標簽轉(zhuǎn)換成html實體,從而使得黑客輸入的Javascript代碼不被執(zhí)行。

任何情況下,對于系統(tǒng)的輸出都應(yīng)該進行適當(dāng)?shù)霓D(zhuǎn)義(轉(zhuǎn)義方法根據(jù)不同情況而有所不同,并不局限于htmlentities()函數(shù)),這樣才不會讓黑客有機可乘。

聲明:本文由鄭州批發(fā)市場: 原創(chuàng)投稿,尊重他人成果,轉(zhuǎn)載請注明出處!

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

相關(guān)文章

  • PHP5停更,中企動力為你保駕護航

    這兩天你們都心慌慌,為什么?因為市面上的PHP5將于年底停止更新,六成用戶將面臨安全風(fēng)險。筆者我只能說,這次絕對穩(wěn)了!因為這些語言跟我們沒關(guān)系,詳細了解下中企的技術(shù)實力!

  • PHP開發(fā)者的Linux學(xué)習(xí)之路

    談起一個高效動態(tài)網(wǎng)站的構(gòu)建,那就不得不提到LAMP,即Linux操作系統(tǒng)、Apache網(wǎng)絡(luò)服務(wù)器、Mysql數(shù)據(jù)庫、Perl、PHP或Python編程語言等開源產(chǎn)品所組成的網(wǎng)站架構(gòu)框架,其最大的優(yōu)勢是開放性強,安全性高,且成本低廉。因此,LAMP成為了國際流行的網(wǎng)站構(gòu)建方案。而作為一名php開發(fā)人員

  • PHP二次開發(fā)discuz3.2最新體驗

    康盛官方于6月4號發(fā)布了discuz3.2的正式版,因為這兩天一直忙于一個項目,一直沒來的及體驗,現(xiàn)在抽時間總算是裝上了,也體驗一把。根據(jù)官方說明:Discuz!X3.2在繼承和完善Discuz!X3.1的基礎(chǔ)上,針對社區(qū)移動端進行了新的嘗試。推出微信登錄、微社區(qū)等功能。安全穩(wěn)定的程序為站長提供更加

  • 使用CakePHP框架開發(fā)網(wǎng)站

    現(xiàn)如今成熟的PHP開發(fā)框架有很多種,YII,zendframwork,國內(nèi)輕量型框架Thinkphp,還有開發(fā)效率很高的CakePHP。公司可以根據(jù)自己的需求選擇合適的開發(fā)框架,在這里,小編以自己公司使用的開發(fā)框架CakePHP作為重點介紹,闡述它的優(yōu)點。CakePHP的簡要介紹:PHP框架已被

  • 漫談社區(qū)PHP業(yè)務(wù)開發(fā) 提高效率縮短開發(fā)周期

    在當(dāng)前這個互聯(lián)網(wǎng)業(yè)務(wù)飛速發(fā)展時期,新的產(chǎn)品如雨后春筍般涌出,老產(chǎn)品線新業(yè)務(wù)也在不斷突破和嘗試。這就對快速開發(fā)迭代提出了更高的要求。一、基礎(chǔ)運行環(huán)境針對新產(chǎn)品的開發(fā),必須能夠快速搭建一套LAMP架構(gòu)。那么無外乎選擇一個webserver,選擇一個php版本,選擇一

熱門排行

信息推薦