開(kāi)發(fā)代碼安全規(guī)范-防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范_第1頁(yè)
開(kāi)發(fā)代碼安全規(guī)范-防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范_第2頁(yè)
開(kāi)發(fā)代碼安全規(guī)范-防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范_第3頁(yè)
開(kāi)發(fā)代碼安全規(guī)范-防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范_第4頁(yè)
開(kāi)發(fā)代碼安全規(guī)范-防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

編號(hào):BFG【2015】I:第021-1號(hào)第11頁(yè)共11頁(yè)集團(tuán)IT部 版本:V1.0創(chuàng)建日期:20151201BFG【2015】I:第021-1號(hào)開(kāi)發(fā)代碼安全規(guī)范防SQL注入和XSS跨站攻擊代碼編寫(xiě)規(guī)范修訂歷史版本發(fā)布日期作者審核者改版記錄1.02015-12-01正式版目錄概述 2適用范圍 2一、第一類漏洞類型-SQL注入(SQLInjection)及規(guī)范 21.1名詞解釋: 21.2經(jīng)典案例說(shuō)明: 21.3代碼實(shí)例分析: 61.4防止SQL注入攻擊的代碼安全規(guī)范總結(jié): 7二、第二類漏洞類型-XSS跨站腳本攻擊及規(guī)范 82.1名詞解釋: 82.2經(jīng)典案例說(shuō)明: 82.3防止XSS跨站腳本攻擊的代碼安全規(guī)范總結(jié): 9三、安全操作實(shí)踐 10 概述在技術(shù)高速發(fā)展的今天,Web應(yīng)用被廣泛使用,伴隨而來(lái)的是各種安全隱患,主要是編程人員的安全意識(shí)較淡薄,缺乏安全編程經(jīng)驗(yàn),上線前安全檢測(cè)不全面。因此,給心懷不軌之人以機(jī)會(huì),對(duì)公司和個(gè)人財(cái)產(chǎn)安全造成威脅。本規(guī)范希望給編程人員一個(gè)較清晰的安全概念,在代碼編寫(xiě)時(shí)提高警惕。適用范圍xx集團(tuán)及其分子公司業(yè)務(wù)系統(tǒng)的所有開(kāi)發(fā)人員,包括系統(tǒng)外包的第三方開(kāi)發(fā)人員。一、第一類漏洞類型-SQL注入(SQLInjection)及規(guī)范1.1名詞解釋:SQL注入攻擊:通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意)的SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。1.2經(jīng)典案例說(shuō)明:例1:用戶登錄界面及標(biāo)準(zhǔn)輸入格式:Web與數(shù)據(jù)庫(kù)連接調(diào)用方式:通過(guò)“‘空’or’1’=’1’”這類非法輸入,進(jìn)行惡意SQL注入以上例子是開(kāi)發(fā)人員直接把用戶輸入當(dāng)作可信部分直接和SQL語(yǔ)句拼接造成的SQL漏洞。例2:即使開(kāi)發(fā)人員利用PHP內(nèi)置的過(guò)濾函數(shù)后,還是有可能出現(xiàn)問(wèn)題:調(diào)用PHP函數(shù)可以改善查詢和調(diào)用,并限制輸入類型,但仍然無(wú)法避免注入:利用GBK轉(zhuǎn)譯編碼方式依舊可以執(zhí)行‘空’or‘1=1’類注入語(yǔ)句因此,使用PHP函數(shù)規(guī)范輸入時(shí),還必須注意字符集選擇問(wèn)題:1.3代碼實(shí)例分析:Web應(yīng)用存在著多種多樣的SQL注入漏洞,下面以生產(chǎn)實(shí)例進(jìn)行分析。實(shí)例1:參數(shù)傳遞SQL語(yǔ)句片斷數(shù)據(jù)來(lái)源:某線上業(yè)務(wù)被攔截?cái)?shù)據(jù)數(shù)據(jù)日期:2015-10-21數(shù)據(jù)內(nèi)容:HTTP請(qǐng)求的URLPATH/WRIROOT?wri=671&DBName=dev&pagenum=15&page=1&SortValue=%20order%20by%20FeeStamp%20%20Desc&XXXXX=WWW攔截處理截圖:案例分析:在這個(gè)案例中,URL參數(shù)SortValue的值為'orderbyFeeStampDesc',這是一個(gè)典型的SQL注入點(diǎn)。對(duì)于業(yè)務(wù)需求來(lái)說(shuō),傳遞orderbyFeeStampDesc可能方便了后端的處理,但是如果被惡意攻擊,那么可以傳不符合業(yè)務(wù)預(yù)期的參數(shù),對(duì)后端數(shù)據(jù)庫(kù)造成損害。如:orderbyFeeStampDescunionselectusername,password,1,2,3fromusers*注:此處假設(shè)存在users數(shù)據(jù)表,并且有username和password的列數(shù)據(jù)。實(shí)例2:參數(shù)傳遞完整SQL語(yǔ)句數(shù)據(jù)來(lái)源:某線上業(yè)務(wù)被攔截?cái)?shù)據(jù)數(shù)據(jù)日期:2015-10-21數(shù)據(jù)內(nèi)容:HTTP請(qǐng)求的BODY攔截處理截圖:案例分析:在這個(gè)案例中,HTTPBody是常見(jiàn)的application/x-www-form-urlencoded類型。其中DBName參數(shù)的值是dev,sql參數(shù)的值是:selecta.payoutid,a.value,b.basket_id,b.inserttime,a.suppliername,a.currentrankfromtabpayout_sheetaleftjoinTabPayOut_Basketbona.payoutid=b.payoutidwherea.payoutidin(605641737)這里開(kāi)發(fā)人員為了業(yè)務(wù)的便利性,直接從客戶端將完整SQL語(yǔ)句通過(guò)HTTP請(qǐng)求發(fā)送給后端。這也是非常典型的SQL注入點(diǎn),對(duì)于惡意攻擊的黑客來(lái)說(shuō),可以構(gòu)造惡意SQL語(yǔ)句請(qǐng)求給后端,從而達(dá)到惡意獲取數(shù)據(jù)、修改數(shù)據(jù)、毀壞數(shù)據(jù)的目的,甚至如果權(quán)限設(shè)置不合理的話,惡意攻擊的黑客可能從該注入點(diǎn)獲取服務(wù)器管理權(quán)限。1.4SQL注入危害:敏感數(shù)據(jù)被獲取(cookie盜取)網(wǎng)絡(luò)釣魚(yú)獲取web用戶的網(wǎng)頁(yè)內(nèi)容SessionRiding(CSRF攻擊)獲取用戶的鍵盤(pán)擊鍵數(shù)據(jù)web僵尸1.5防止SQL注入攻擊的代碼安全規(guī)范總結(jié):1、所有的查詢語(yǔ)句都使用數(shù)據(jù)庫(kù)提供的參數(shù)化查詢接口,參數(shù)化的語(yǔ)句使用參數(shù)而不是將用戶輸入變量嵌入到SQL語(yǔ)句中。當(dāng)前,幾乎所有的數(shù)據(jù)庫(kù)系統(tǒng)都提供了參數(shù)化SQL語(yǔ)句執(zhí)行接口,使用此接口可以非常有效的防止SQL注入攻擊。2、對(duì)進(jìn)入數(shù)據(jù)庫(kù)的特殊字符('"\<>&*;等)進(jìn)行轉(zhuǎn)義處理,或編碼轉(zhuǎn)換。3、確認(rèn)每種數(shù)據(jù)的類型。比如:數(shù)字型的數(shù)據(jù)就必須是數(shù)字,數(shù)據(jù)庫(kù)中的存儲(chǔ)字段必須對(duì)應(yīng)為int型。4、數(shù)據(jù)長(zhǎng)度應(yīng)該嚴(yán)格規(guī)定,能在一定程度上防止比較長(zhǎng)的SQL注入語(yǔ)句無(wú)法正確執(zhí)行。5、每個(gè)數(shù)據(jù)層的編碼統(tǒng)一,建議全部使用UTF-8編碼,上下層編碼不一致有可能導(dǎo)致一些過(guò)濾模型被繞過(guò)。6、嚴(yán)格限制用戶的數(shù)據(jù)庫(kù)的操作權(quán)限,給此用戶提供僅僅能夠滿足其工作的權(quán)限,從而最大限度的減少注入攻擊對(duì)數(shù)據(jù)庫(kù)的危害。7、SQL注入種類,方式變換繁多,并不能做全數(shù)說(shuō)明,所提內(nèi)容均為基礎(chǔ)說(shuō)明,以提醒警示為主。二、第二類漏洞類型-XSS跨站腳本攻擊及規(guī)范2.1名詞解釋:XSS跨站腳本攻擊:為不和層疊樣式表(CascadingStyleSheets,CSS)的縮寫(xiě)混淆,故將跨站腳本攻擊縮寫(xiě)為XSS。惡意攻擊者往Web頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的。2.2經(jīng)典案例說(shuō)明:Web應(yīng)用與數(shù)據(jù)庫(kù)正常的調(diào)用鏈接方式如下:如果插入一條惡意JS腳本當(dāng)插入的惡意JS腳本被調(diào)用,就形成了XSS攻擊。2.3XSS危害繞過(guò)防火墻進(jìn)行攻擊繞過(guò)web應(yīng)用程序的驗(yàn)證過(guò)程非法越權(quán)操作數(shù)據(jù)庫(kù)內(nèi)容隨意篡改網(wǎng)頁(yè)內(nèi)容添加系統(tǒng)帳戶或數(shù)據(jù)庫(kù)帳戶上傳和下載非法文件本地溢出并獲取系統(tǒng)最高權(quán)限安裝木馬后門(mén)/僵尸網(wǎng)絡(luò)2.4防止XSS跨站腳本攻擊的代碼安全規(guī)范總結(jié):1、要假定所有輸入都是可疑的,必須對(duì)所有輸入中的script、iframe等字樣進(jìn)行嚴(yán)格的檢查。這里的輸入不僅僅是用戶可以直接交互的輸入接口,也包括HTTP請(qǐng)求中的Cookie中的變量,HTTP請(qǐng)求頭部中的變量等。2、不僅要驗(yàn)證數(shù)據(jù)的類型,還要驗(yàn)證其格式、長(zhǎng)度、范圍和內(nèi)容。3、不要僅僅在客戶端做數(shù)據(jù)的驗(yàn)證與過(guò)濾,關(guān)鍵的過(guò)濾步驟在服務(wù)端進(jìn)行。4、對(duì)輸出的數(shù)據(jù)也要檢查,數(shù)據(jù)庫(kù)里的值有可能會(huì)在一個(gè)大網(wǎng)站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點(diǎn)時(shí)也要進(jìn)行安全檢查。5、在發(fā)布應(yīng)用程序之前測(cè)試所有已知的威脅。6、XSS跨站腳本種類,方式變換繁多,并不能做

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論