我有一個AJAX調用,它返回一個需要注入頁面的HTML片段,以及一些'腳本'元素下的一些JS代碼。JS代碼AJAX與jQuery - 這種方法是否安全?
裏有沒有響應HTML /體/頭元素,只需要被注入的HTML。這樣的反應可能是:需要通過要麼使用eval()或通過創建一個元素,即添加到頁面
<div>lorem ipsum</div>
<script>alert(1);</script>
從我的理解,JS代碼是通過AJAX獲取:
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = response;
var head = document.getElementsByTagName("head")[0];
head.appendChild(script);
但是,我試過在jQuery中使用.html()嵌入響應 - 令我驚訝的是,似乎JS代碼和HTML部分都按預期處理,HTML部分被添加到該頁面和JS代碼運行得很好。
這是我已經試過:
$.ajax({
url: url,
success: function(data) {
$('#foo').html(data);
// #foo now contains '<div>lorem ipsum</div>' and the JS alert was fired
}
});
這是一種安全的方法?它會在每個瀏覽器上工作嗎?
如果不是 - 完成我所嘗試的最佳方法是什麼(我可能需要解析響應以將<script>
元素與其他元素分開)?
非常感謝提前!
我同意 - 您不希望用戶有權訪問以編程方式影響您的代碼。例如,更好的方式是根據您獲得的響應將您自己的預編寫函數作爲回調調用,而不是通過線路接收代碼進行評估。此外,您可以更輕量級地接收JSON內容,然後構建插入的HTML代碼段,而不是通過ajax發送完整的HTML內容。 – 2011-04-08 01:12:07