自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

網(wǎng)站防范XSS攻擊的關(guān)鍵思考

安全 應(yīng)用安全
要更徹底地防止網(wǎng)站受到跨站指令代碼攻擊和信息隱性代碼攻擊,系統(tǒng)就必須對(duì)于使用者端輸入信息做到足夠的檢核并保護(hù)好網(wǎng)頁(yè)內(nèi)容,避免產(chǎn)生意外的有害行為。

要更徹底地防止網(wǎng)站受到跨站指令代碼攻擊和信息隱性代碼攻擊,系統(tǒng)就必須對(duì)于使用者端輸入信息做到足夠的檢核并保護(hù)好網(wǎng)頁(yè)內(nèi)容,避免產(chǎn)生意外的有害行為。

攻擊網(wǎng)站通常都是通過(guò)跨站指令代碼(Cross-siteScripting)攻擊網(wǎng)站的后臺(tái)漏洞。它和信息隱性代碼攻擊(SQLInjection)攻擊的目標(biāo)不同。前者是透過(guò)從Web前端輸入信息至網(wǎng)站,導(dǎo)致網(wǎng)站輸出了被惡意控制的網(wǎng)頁(yè)內(nèi)容,使得系統(tǒng)安全遭到破壞。而后者則是輸入了足以改變系統(tǒng)所執(zhí)行之SQL語(yǔ)句內(nèi)容的字串,使得系統(tǒng)最終達(dá)到攻擊的目的。

但從更一般性的角度來(lái)看,這兩種攻擊手法基本上是相通的。他們都是透過(guò)系統(tǒng)對(duì)于輸入信息的毫無(wú)檢核或是檢核不足,利用刻意制造出來(lái)的輸入信息,來(lái)讓系統(tǒng)產(chǎn)生不在預(yù)期內(nèi)的有害行為。

過(guò)濾輸入信息有效嗎?

因此,當(dāng)要防備這類(lèi)型的攻擊時(shí),大多數(shù)人直覺(jué)想到的方式,便是對(duì)使用者所提供的輸入信息進(jìn)行過(guò)濾。在面對(duì)信息隱性代碼攻擊時(shí),許多人會(huì)想到針對(duì)輸入信息中,可能會(huì)含有的SQL關(guān)鍵字串或字元進(jìn)行過(guò)濾,例如,使用者的輸入信息中若含有單引號(hào),那么便可能制造出危險(xiǎn)的SQL語(yǔ)句,因此,許多程序設(shè)計(jì)者便會(huì)想到要針對(duì)單引號(hào)進(jìn)行escape,來(lái)杜絕信息隱性代碼的攻擊。而這種escape或過(guò)濾的方法,其實(shí)不難規(guī)避,例如,針對(duì)單引號(hào),有心人士還是可以利用信息庫(kù)服務(wù)器支持的特殊寫(xiě)法,將單引號(hào)字元替換成其他的型式,使得escape的程序失效。

同樣的,面對(duì)跨站指令代碼攻擊,許多程序設(shè)計(jì)者首先會(huì)想到的,也是針對(duì)有可能造成疑慮的使用者信息進(jìn)行過(guò)濾。例如,針對(duì)字元、SCRIPT字串進(jìn)行過(guò)濾,倘若使用者的輸入信息中含有可疑的字元或字串時(shí),則進(jìn)行改寫(xiě)或禁止使用。這種針對(duì)特定的目標(biāo)進(jìn)行篩選過(guò)濾的方式,可以稱(chēng)為黑名單式的過(guò)濾,因?yàn)?,程序是先列出不能出現(xiàn)的對(duì)象清單,然后進(jìn)行過(guò)濾。

當(dāng)然,在跨站指令代碼攻擊中,如果想利用黑名單式的過(guò)濾方式,當(dāng)然也是行不通的。因?yàn)椋瑔问莏avascript這個(gè)字串,有心人士就可以產(chǎn)生在HTML中等價(jià)、但是字串形式不為javascript的寫(xiě)法。例如,使用#x的十六進(jìn)位字元表示方式,來(lái)表示javascript這個(gè)字串中的每一個(gè)字元。由于改寫(xiě)形式太多了,這使得想要利用黑名單的方式,幾乎是不可能的事。

因此,無(wú)論何種攻擊,想要有更嚴(yán)密的防備,在信息的過(guò)濾上,都應(yīng)該采取白名單式的過(guò)濾。而這正和黑名單相反,它不是列出不被允許的對(duì)象,而是列出可被接受的對(duì)象。

以正向表列的方式管制

在面對(duì)信息隱性代碼攻擊時(shí),我們建議針對(duì)每個(gè)欄位都明確定義出它該有的形式,例如日期欄位就只能出現(xiàn)數(shù)字和斜線字元,而ID欄位,僅能出現(xiàn)英文字母及底線字元等等。如此一來(lái),想要透過(guò)信息植入有害的組成,就不是那么容易可以辦到了。

對(duì)于同樣需要對(duì)輸入信息進(jìn)行檢核的跨站指令代碼攻擊來(lái)說(shuō),要做到輸入信息的過(guò)濾,最好的策略也是基于白名單來(lái)過(guò)濾。例如,允許使用者輸入HTML語(yǔ)法的地方,若僅允許輸入圖片,則可開(kāi)放形式的輸入,其余則否。這么一來(lái),想要規(guī)避過(guò)濾的規(guī)則,難度就比較高了。

當(dāng)然,采取較嚴(yán)格的白名單政策,程序在撰寫(xiě)難度上比較高,此外,允許使用者信息輸入的形式也就更為受限,但這是為了安全必須付出的代價(jià)。

將網(wǎng)頁(yè)內(nèi)容編代碼,提升防御力

除了針對(duì)輸入信息進(jìn)行白名單式的過(guò)濾之外,針對(duì)輸出的頁(yè)面內(nèi)容進(jìn)行編代碼,也是實(shí)務(wù)上能派上用場(chǎng)的技巧。輸入信息的過(guò)濾是針對(duì)可疑的信息進(jìn)行防范,而針對(duì)輸入進(jìn)行編代碼,則是讓可能造成危害的信息變成無(wú)害。

慶幸的是,有許多程序語(yǔ)言都推出了為了防范跨站指令代碼攻擊的程序庫(kù),協(xié)助程序設(shè)計(jì)者針對(duì)HTML輸出內(nèi)容進(jìn)行編代碼。例如PHP的htmlentities()或是htmlspecialchars()、ASP的Server.HTMLEncode()、ASP.NET的Server.HtmlEncode()等等。讓專(zhuān)門(mén)的程序庫(kù)來(lái)處理輸入內(nèi)容的編代碼,也可以減少程序設(shè)計(jì)者自行開(kāi)發(fā)的額外成本,同時(shí)也能提供更為完善的防備考慮。而像微軟,更提供了一個(gè)名為MicrosoftAnti-CrossSiteScriptingLibrary的程序庫(kù),提供了各種HTML、JavaScript、URL、XML、VBScript的過(guò)濾及編代碼機(jī)制。如此一來(lái).便可以透過(guò)這一套程序庫(kù),將來(lái)自于使用者輸入的字串,或是以使用者輸入字串為基礎(chǔ)的輸出字串進(jìn)行轉(zhuǎn)換,成為單純的文字,而不含可于瀏覽器上執(zhí)行script程序,因此能夠降低遭受到攻擊的風(fēng)險(xiǎn)。

徹底分析程序代碼可能的弱點(diǎn)

在撰寫(xiě)程序時(shí),如果能夠留意輸入信息的輸出,以及輸出頁(yè)面內(nèi)容的編代碼,相信可以增加不少防范的強(qiáng)度。但是,針對(duì)既有的程序代碼,倘若存在跨站指令代碼攻擊的漏洞,又該如何察覺(jué)并進(jìn)行防范呢?基本上,你可以采取一個(gè)系統(tǒng)性的分析方法。

若想要審視你的程序代碼是否具有跨站指令代碼攻擊的問(wèn)題,根據(jù)《WritingSecureCode》一書(shū)中的建議,首先,你必須要列舉出你的網(wǎng)站程序中所有接收自使用者端送出信息的地方。所謂使用者端的信息,包括了你的網(wǎng)站程序所讀取表格中的每個(gè)欄位、來(lái)自于網(wǎng)址中的查詢字串、cookies的值、HTTP的標(biāo)頭等等。因?yàn)?,不要忘了,所有?lái)自于使用者的信息“都是邪惡的”。

找到了每個(gè)接收使用者端信息的地方后,便可以逐一追蹤每筆信息在應(yīng)用程序中的流向,檢驗(yàn)所接收到的信息,最終是否會(huì)反映到輸出的頁(yè)面結(jié)果中。這中間,你可能直接把接收來(lái)的信息稍微加工后,就當(dāng)做輸出結(jié)果送出去了也有可能,先把所接收到的信息儲(chǔ)存在信息庫(kù)或檔案中,于日后才做為輸出結(jié)果送出。

倘若,你所找出來(lái)的信息最終會(huì)成為輸出頁(yè)面的一部份,那么,你就應(yīng)該檢查這份信息是否足夠“乾凈”,也就是說(shuō),你是否有針對(duì)這份信息進(jìn)行足夠的過(guò)濾或在輸出時(shí)加上了編代碼的動(dòng)作。倘若沒(méi)有,那么,這份信息就有可能成為跨站指令代碼攻擊被發(fā)動(dòng)的點(diǎn)。也就是說(shuō),你應(yīng)該針對(duì)這份信息的輸入及輸出,進(jìn)行相對(duì)應(yīng)的處理。透過(guò)以上的步驟,有助于你審視既有的程序代碼的問(wèn)題。

除此之外,檢查你的JavaScript程序中,動(dòng)用到innerHTML以及document.write()的地方,是否有安全疑慮,也會(huì)有幫助。另外,在JavaScript程序中使用eval(),同樣有可能造成安全問(wèn)題。eval()函數(shù)允許在瀏覽器上直接將傳入該函數(shù)的參數(shù)做為JavaScritp算式或是可執(zhí)行的語(yǔ)句,動(dòng)態(tài)的評(píng)估算式之值或是加以執(zhí)行。倘若,eval()所接收的參數(shù)之值,是來(lái)自于使用者輸入的部份信息,那么可以造成的危機(jī)就大了,因?yàn)檫@意謂著,使用者有機(jī)會(huì)控制透過(guò)eval()所執(zhí)行的JavaScript語(yǔ)句,系統(tǒng)安全形同門(mén)戶洞開(kāi)。這也就是近來(lái),為什么許多守則都建議不要使用eval()的原因,因?yàn)樘菀仔纬砂踩缘穆┒戳恕?/p>

跨站指令代碼攻擊的確是十分難以防守的攻擊形式,但不小心,就有可能造成頗大的傷害。遺憾的是,還是有不少Web應(yīng)用程序設(shè)計(jì)者并沒(méi)有小心的提防,希望可以透過(guò)這里,帶給你基本的認(rèn)知。關(guān)于跨站指令代碼攻擊其中還充滿許多高深的探討和技巧,不在本文范圍之內(nèi),建議有興趣者自行鉆研之。
 

【編輯推薦】

  1. 淺談如何防范XSS攻擊
  2. xss攻擊 Web安全新挑戰(zhàn)
  3. XSS攻擊防御技術(shù)白皮書(shū)
  4. XSS攻擊升溫,Web業(yè)務(wù)安全面臨更大挑戰(zhàn)
  5. 尷尬一刻——愛(ài)好者演示MPAA組織網(wǎng)頁(yè)的XSS攻擊漏洞
責(zé)任編輯:張?zhí)裉?/span> 來(lái)源: eNet硅谷動(dòng)力
相關(guān)推薦

2011-11-25 15:58:43

2010-09-13 10:14:30

2020-11-30 23:37:48

ReactXSS攻擊網(wǎng)絡(luò)攻擊

2013-01-28 16:44:50

2022-04-14 15:28:46

安全勒索軟件贖金

2024-10-12 10:57:21

2024-02-20 14:58:29

2011-07-04 14:12:34

2011-08-09 15:09:45

2013-04-07 10:11:27

2010-11-01 21:28:53

2012-12-19 10:36:06

2009-09-22 12:39:04

2010-09-14 22:01:48

2012-11-27 16:41:42

2017-05-16 14:25:28

2010-09-07 10:44:14

2020-02-17 16:52:06

誤植攻擊網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2010-09-16 15:39:18

2018-07-16 08:36:13

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)