src=”http://victimsite.com/mainJSON”/> //this points to the JSON
</script>
腳本再次發(fā)出請(qǐng)求,victimsite.com和訪問(wèn)主JSON頁(yè)發(fā)送敏感數(shù)據(jù)到攻擊者的網(wǎng)頁(yè),其中有兩個(gè):現(xiàn)在JSON數(shù)據(jù)和身份驗(yàn)證令牌。
然而,上述攻擊的先決條件是JSON數(shù)據(jù)必須敏感于自然和瀏覽器應(yīng)該接受__defineSetter__方法,它覆蓋了現(xiàn)有的DOM或函數(shù)時(shí)調(diào)用屬性setter。在以上示例中,只要是被稱為“t”內(nèi)的屬性,函數(shù)警報(bào),并且顯示它。然而,沒(méi)有多少瀏覽器支持defineSetter,’方法。
應(yīng)對(duì)措施:
切勿將敏感信息發(fā)送JSON或不給他們使用JSON數(shù)組,這使得它可以通過(guò)腳本標(biāo)記有效的JavaScript。
只服務(wù)身份驗(yàn)證的請(qǐng)求,意味著使用某種形式的身份驗(yàn)證來(lái)保護(hù)數(shù)據(jù)
必須發(fā)送JSON數(shù)據(jù)通過(guò)POST,GET,這將使它很難在<script>標(biāo)簽包括URL
CSRF是什么?
CSRF代表跨站請(qǐng)求偽造,利用Web技術(shù)的一個(gè)基本的缺陷,它依賴于基于cookie認(rèn)證并提交一個(gè)請(qǐng)求從用戶到服務(wù)器。在CSRF攻擊者可以欺騙用戶執(zhí)行,這是一個(gè)動(dòng)作,不是有意的。必須進(jìn)行身份驗(yàn)證和用戶的攻擊的時(shí)候,有一個(gè)有效的會(huì)話ID。攻擊者也是使用一個(gè)有效的應(yīng)用程序,并知道應(yīng)用程序的內(nèi)部運(yùn)作。更多關(guān)于CSRF這里:
CSRF和Ajax:
盡管CSRF是在傳統(tǒng)的Web應(yīng)用中非常普遍,如果預(yù)防是無(wú)法實(shí)現(xiàn)的,它也可以進(jìn)行基于AJAX的Web應(yīng)用程序。唯一困難的是,因?yàn)樗且粋€(gè)隱藏的請(qǐng)求,它不是直接創(chuàng)建一個(gè)有效的請(qǐng)求。我們需要不僅要求技巧的標(biāo)準(zhǔn),但我們也需要堅(jiān)持有效的數(shù)據(jù)格式。
攻擊的步驟:
1.用戶到Web應(yīng)用程序進(jìn)行身份驗(yàn)證,并瀏覽其內(nèi)容。
2.攻擊者,也是一個(gè)有效的用戶,創(chuàng)建一個(gè)用戶身份驗(yàn)證點(diǎn)擊一個(gè)鏈接,獲取以下html頁(yè)面和加載載在其瀏覽器。
3.因此瀏覽器發(fā)出請(qǐng)求代表身份驗(yàn)證的用戶。
防御措施:
為了防止這種攻擊,類似傳統(tǒng)的做法,要做到這一點(diǎn)有兩種方式:
嵌入非猜測(cè)的,隨機(jī)的令牌稱為當(dāng)前請(qǐng)求/響應(yīng)用戶請(qǐng)求的身份驗(yàn)證和一個(gè)來(lái)自攻擊者的區(qū)分。這種方法基本上服務(wù)器嵌入當(dāng)前請(qǐng)求頁(yè)面。當(dāng)用戶提交頁(yè)面的服務(wù)器的可用性檢查的隨機(jī)數(shù),如果匹配,完成請(qǐng)求,否則拒絕。
使用Anti-CSRF header:我們的想法是生成一個(gè)自定義的heade, x-session-token在這種情況下,這被認(rèn)為是敏感的,包括任何形式的交易請(qǐng)求。例如:xhr.setRequestHeader(’x-session-token’,csrf_token)
在服務(wù)端,服務(wù)器檢查這個(gè)header如果發(fā)現(xiàn)請(qǐng)求匹配,否則拒絕。我們需要利用這種技術(shù)使用XHR調(diào)用,還沒(méi)有用常規(guī)POST和GET請(qǐng)求。
XSS和Ajax:
XSS或跨站腳本:當(dāng)一個(gè)應(yīng)用程序不將用戶輸入或輸出為HTML渲染之前,它成為一個(gè)誘人的目標(biāo),因?yàn)樗麄兛梢栽趹?yīng)用程序中插入惡意的JavaScript,并隨后進(jìn)行放一炮而紅的攻擊目標(biāo),例如,會(huì)話劫持,網(wǎng)絡(luò)釣魚,惡意軟件感染等更多在這里:
在Ajax應(yīng)用程序中尋找XSS:
可能的XSS指針是在JavaScript文件中的以下功能(JS)的存在。Ajax從后端接收響應(yīng),并填充的瀏覽器,使用以下功能之一:
document.write(): 這可能導(dǎo)致基于DOM的XSS。如果值沒(méi)有被正確過(guò)濾或修改一個(gè)特定部分的信息使用eval()是另一個(gè)指針。
其他易受傷害的功能被定為的innerHTML()和write()。
仔細(xì)掃描JavaScript的文件,在客戶端加載目標(biāo)頁(yè)面的加載時(shí)間,可以給正在使用危害的函數(shù)一些提示。Firebug工具,它是偉大的,非常方便的在做這樣的分析。我們可以找出所有的Ajax調(diào)用XHR標(biāo)簽
下(圖):防御措施:
此外看看以下實(shí)例:
if(window.XMLHttpRequest)
http = new XMLHttpRequest();
eval(info);
if(window.XMLHttpRequest)
http = new XMLHttpRequest();
document.write(blogdetail);
我們需要分析這些功能,因?yàn)樗鼈兛赡苁俏催^(guò)濾的數(shù)據(jù),可被利用的入口點(diǎn)。
一個(gè)從iSEC Partners的好例子:
XSS有效加載在Jason和它們的效果:
var inboundJSON = {“people”: [
{"name": "Joel", "address": “<script type="text/javascript">// <![CDATA[
badStuff();
// ]]></script>”, “phone”: “911″}]};
someObject.innerHTML(inboundJSON.people[0].address); // Vulnerable
document.write(inboundJSON.people[0].address); // Vulnerable
someObject.innerText(inboundJSON.people[0].address // Not Vulnerable
防御措施:
幾乎是相同的,我們會(huì)做傳統(tǒng)的XSS預(yù)防:
輸入驗(yàn)證:嚴(yán)格檢查什么是允許的,什么不是在用戶輸入。正確過(guò)濾白名單允許的字符
輸出驗(yàn)證:這意味著,所有的輸出必須正確編碼,然后呈現(xiàn)給用戶如HTMLEncoding。
結(jié)論:
因此,大部分影響Ajax的問(wèn)題是那些傳統(tǒng)的Web應(yīng)用程序,他們可能同樣的方式得到減輕。
更多建議: