當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  建站經(jīng)驗(yàn) >  正文

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

 2014-03-21 10:30  來(lái)源: A5專欄   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

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

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

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

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

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

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

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

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

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

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

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

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

  • PHP5停更,中企動(dòng)力為你保駕護(hù)航

    這兩天你們都心慌慌,為什么?因?yàn)槭忻嫔系腜HP5將于年底停止更新,六成用戶將面臨安全風(fēng)險(xiǎn)。筆者我只能說(shuō),這次絕對(duì)穩(wěn)了!因?yàn)檫@些語(yǔ)言跟我們沒(méi)關(guān)系,詳細(xì)了解下中企的技術(shù)實(shí)力!

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

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

    標(biāo)簽:
    php開(kāi)發(fā)工具
  • PHP二次開(kāi)發(fā)discuz3.2最新體驗(yàn)

    康盛官方于6月4號(hào)發(fā)布了discuz3.2的正式版,因?yàn)檫@兩天一直忙于一個(gè)項(xiàng)目,一直沒(méi)來(lái)的及體驗(yàn),現(xiàn)在抽時(shí)間總算是裝上了,也體驗(yàn)一把。根據(jù)官方說(shuō)明:Discuz!X3.2在繼承和完善Discuz!X3.1的基礎(chǔ)上,針對(duì)社區(qū)移動(dòng)端進(jìn)行了新的嘗試。推出微信登錄、微社區(qū)等功能。安全穩(wěn)定的程序?yàn)檎鹃L(zhǎng)提供更加

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

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

    標(biāo)簽:
    php開(kāi)發(fā)工具
  • 漫談社區(qū)PHP業(yè)務(wù)開(kāi)發(fā) 提高效率縮短開(kāi)發(fā)周期

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

    標(biāo)簽:
    php開(kāi)發(fā)工具

熱門(mén)排行

信息推薦