為什么決定使用XMLHTTPRequest進(jìn)行XML調(diào)用不應(yīng)該跨域邊界進(jìn)行調(diào)用?您可以檢索JavaScript,圖像,CSS,iframe以及我可以想到的來自其他域的幾乎所有其他內(nèi)容。為什么不允許Ajax HTTP請求跨越域邊界?考慮到我可以看到它被濫用的唯一方法,這似乎是一個(gè)奇怪的限制,那就是如果有人要向頁面中注入Javascript。但是,在這種情況下,您只需在文檔中添加一個(gè)img,腳本或iframe元素即可獲取該文件以請求第三方URL并將其發(fā)送到服務(wù)器。[編輯]一些答案指出了以下原因,讓我們指出了它們沒有創(chuàng)建不允許這樣做的主要原因的原因。XSRF(跨站點(diǎn)請求偽造,也稱為CSRF,XSRF)您可以完全不使用XSRF進(jìn)行攻擊。通常,根本不使用XMLHTTPRequest,只是因?yàn)楹茈y以與所有主要瀏覽器兼容的方式創(chuàng)建XMLHTTPRequest。如果希望他們加載URL,只需在URL上添加一個(gè)img標(biāo)記就容易得多。發(fā)布到第三方網(wǎng)站<script type="text/javascript"> $.post("http://some-bank.com/transfer-money.php", { amount: "10000", to_account: "xxxx" })</script>可以完成<body onload="document.getElementById('InvisbleForm').submit()" <div style="display:none"> <form id="InvisbleForm" action="http://some-bank.com/transfer-money.php" method="POST"> <input type="hidden" name="amount" value="10000"> <input type="hidden" name="to_account" value="xxxxx"> </form> </div></body>JPunyon:為什么要將該漏洞保留為新功能您不會再造成任何不安全感。您只是給想要以某種方式使用它的開發(fā)人員帶來不便。任何想將此功能用于邪惡(又稱“真棒”)的人都可以使用其他方法來實(shí)現(xiàn)。結(jié)論我將bobince的答案標(biāo)記為正確,因?yàn)樗赋隽岁P(guān)鍵問題。因?yàn)閄MLHTTPRequest允許您使用憑據(jù)(cookie)將其發(fā)布到目標(biāo)站點(diǎn),并讀取從站點(diǎn)發(fā)送回的數(shù)據(jù)以及發(fā)送人員憑據(jù),所以您可以編排一些javascript,這些javascript可以提交一系列表單,包括確認(rèn)表單,并附有為防止XSRF而生成的隨機(jī)密鑰。這樣,您就可以像銀行一樣瀏覽目標(biāo)站點(diǎn),而銀行的網(wǎng)絡(luò)服務(wù)器將無法斷定,不僅僅是提交所有這些表格的普通用戶。
3 回答

阿波羅的戰(zhàn)車
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
為什么不允許Ajax HTTP請求跨越域邊界。
因?yàn)锳JAX請求是(a)使用用戶憑據(jù)提交的,并且(b)允許調(diào)用方讀取返回的數(shù)據(jù)。
這些因素的組合可能導(dǎo)致漏洞。有建議添加一種省略用戶憑據(jù)的跨域AJAX形式。
您只需將img,腳本或iframe元素添加到文檔中
這些方法均不允許調(diào)用者讀取返回的數(shù)據(jù)。
(除非腳本經(jīng)過故意設(shè)置以允許這種情況,允許的跨域腳本編寫,或者有人進(jìn)行了可怕的模仿)。
您可以完全不使用XSS進(jìn)行攻擊。發(fā)布到第三方網(wǎng)站
這不是XSS攻擊。這是跨站點(diǎn)請求偽造攻擊(XSRF)。有解決XSRF攻擊的已知方法,例如包含一次性令牌或加密令牌,以驗(yàn)證提交是否有意來自用戶并且不是從攻擊者代碼啟動(dòng)的。
如果您允許跨域AJAX,則將失去此保護(hù)措施。攻擊代碼可以從銀行網(wǎng)站請求一個(gè)頁面,讀取其中的所有授權(quán)令牌,然后在第二個(gè)AJAX請求中提交它們以執(zhí)行轉(zhuǎn)移。那將是跨站點(diǎn)腳本攻擊。
- 3 回答
- 0 關(guān)注
- 684 瀏覽
添加回答
舉報(bào)
0/150
提交
取消