我有一个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