国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2013-04-17 02:01:31
計算機與網(wǎng)絡(luò) 2013年9期
關(guān)鍵詞:程序代碼使用者代碼

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

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

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

過濾輸入信息有效嗎?

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

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

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

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

以正向表列的方式管制

在面對信息隱性代碼攻擊時,我們建議針對每個欄位都明確定義出它該有的形式,例如日期欄位就只能出現(xiàn)數(shù)字和斜線字元,而ID欄位,僅能出現(xiàn)英文字母及底線字元等等。如此一來,想要透過信息植入有害的組成,就不是那么容易可以辦到了。對于同樣需要對輸入信息進行檢核的跨站指令代碼攻擊來說,要做到輸入信息的過濾,最好的策略也是基于白名單來過濾。例如,允許使用者輸入HTML語法的地方,若僅允許輸入圖片,則可開放形式的輸入,其余則否。這么一來,想要規(guī)避過濾的規(guī)則,難度就比較高了。

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

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

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

慶幸的是,有許多程序語言都推出了為了防范跨站指令代碼攻擊的程序庫,協(xié)助程序設(shè)計者針對HTML輸出內(nèi)容進行編代碼。例如PHP的htmlentities()或是 htmlspecialchars()、ASP 的 Server.HTMLEncode()、ASP.NET的Server.HtmlEncode()等等。讓專門的程序庫來處理輸入內(nèi)容的編代碼,也可以減少程序設(shè)計者自行開發(fā)的額外成本,同時也能提供更為完善的防備考慮。而像微軟,更提供了一個名為MicrosoftAnti-CrossSite-ScriptingLibrary的程序庫,提供了各種HTML、JavaScript、URL、XML、VB

Script的過濾及編代碼機制。如此一來.便可以透過這一套程序庫,將來自于使用者輸入的字串,或是以使用者輸入字串為基礎(chǔ)的輸出字串進行轉(zhuǎn)換,成為單純的文字,而不含可于瀏覽器上執(zhí)行script程序,因此能夠降低遭受到攻擊的風(fēng)險。

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

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

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

倘若,你所找出來的信息最終會成為輸出頁面的一部份,那么,你就應(yīng)該檢查這份信息是否足夠"乾凈",也就是說,你是否有針對這份信息進行足夠的過濾或在輸出時加上了編代碼的動作。倘若沒有,那么,這份信息就有可能成為跨站指令代碼攻擊被發(fā)動的點。也就是說,你應(yīng)該針對這份信息的輸入及輸出,進行相對應(yīng)的處理。透過以上的步驟,有助于你審視既有的程序代碼的問題。

除此之外,檢查你的JavaScript程序中,動用到innerHTML以及document.write()的地方,是否有安全疑慮,也會有幫助。另外,在JavaScript程序中使用eval(),同樣有可能造成安全問題。eval()函數(shù)允許在瀏覽器上直接將傳入該函數(shù)的參數(shù)做為JavaScritp算式或是可執(zhí)行的語句,動態(tài)的評估算式之值或是加以執(zhí)行。倘若,eval()所接收的參數(shù)之值,是來自于使用者輸入的部份信息,那么可以造成的危機就大了,因為這意謂著,使用者有機會控制透過eval()所執(zhí)行的JavaScript語句,系統(tǒng)安全形同門戶洞開。這也就是近來,為什么許多守則都建議不要使用eval()的原因,因為太容易形成安全性的漏洞了。

猜你喜歡
程序代碼使用者代碼
“法定許可”情況下使用者是否需要付費
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
新型拼插休閑椅,讓人與人的距離更近
好日子(2018年5期)2018-05-30 16:24:04
計算機網(wǎng)絡(luò)信息安全未來發(fā)展趨勢
基于圖元裝接模式由程序流程圖自動生成源代碼
軟件工程(2016年11期)2017-01-17 16:56:57
抓拍神器
夢鄉(xiāng)床
乌兰县| 贵州省| 丹阳市| 海安县| 台中县| 罗江县| 福建省| 巧家县| 镇赉县| 瑞金市| 米易县| 合水县| 长垣县| 石泉县| 太谷县| 通州区| 宁夏| 利川市| 且末县| 军事| 连山| 宜良县| 华坪县| 乐业县| 廉江市| 阿城市| 昌平区| 甘孜县| 调兵山市| 阜新市| 大方县| 大洼县| 北京市| 浮梁县| 阜康市| 阿鲁科尔沁旗| 安宁市| 治多县| 巴中市| 永川市| 大理市|