為什么決定使用XMLHTTPRequest進行XML調用不應該跨域邊界進行調用?您可以檢索JavaScript,圖像,CSS,iframe以及我可以想到的來自其他域的幾乎所有其他內容。為什么不允許Ajax HTTP請求跨越域邊界?考慮到我可以看到它被濫用的唯一方法,這似乎是一個奇怪的限制,那就是如果有人要向頁面中注入Javascript。但是,在這種情況下,您只需在文檔中添加一個img,腳本或iframe元素即可獲取該文件以請求第三方URL并將其發送到服務器。[編輯]一些答案指出了以下原因,讓我們指出了它們沒有創建不允許這樣做的主要原因的原因。XSRF(跨站點請求偽造,也稱為CSRF,XSRF)您可以完全不使用XSRF進行攻擊。通常,根本不使用XMLHTTPRequest,只是因為很難以與所有主要瀏覽器兼容的方式創建XMLHTTPRequest。如果希望他們加載URL,只需在URL上添加一個img標記就容易得多。發布到第三方網站<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:為什么要將該漏洞保留為新功能您不會再造成任何不安全感。您只是給想要以某種方式使用它的開發人員帶來不便。任何想將此功能用于邪惡(又稱“真棒”)的人都可以使用其他方法來實現。結論我將bobince的答案標記為正確,因為他指出了關鍵問題。因為XMLHTTPRequest允許您使用憑據(cookie)將其發布到目標站點,并讀取從站點發送回的數據以及發送人員憑據,所以您可以編排一些javascript,這些javascript可以提交一系列表單,包括確認表單,并附有為防止XSRF而生成的隨機密鑰。這樣,您就可以像銀行一樣瀏覽目標站點,而銀行的網絡服務器將無法斷定,不僅僅是提交所有這些表格的普通用戶。
3 回答

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