首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS Code over AJAX with jQuery -这个方法安全吗?

JS Code over AJAX with jQuery -这个方法安全吗?
EN

Stack Overflow用户
提问于 2011-04-08 00:55:33
回答 3查看 210关注 0票数 1

我有一个AJAX调用,它返回需要注入到页面的HTML代码片段,以及“script”元素下的一些JS代码。

响应中没有html/body/head元素,只有需要注入的HTML。因此,响应可能是:

代码语言:javascript
运行
AI代码解释
复制
<div>lorem ipsum</div>
<script>alert(1);</script>

根据我的理解,通过AJAX获取的JS代码需要通过使用eval()或通过创建一个元素添加到页面中,即:

代码语言:javascript
运行
AI代码解释
复制
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代码运行得很好。

这是我尝试过的:

代码语言:javascript
运行
AI代码解释
复制
$.ajax({
    url: url,
    success: function(data) {
        $('#foo').html(data);
        // #foo now contains '<div>lorem ipsum</div>' and the JS alert was fired
    }
});

这是一个安全的方法吗?它能在所有浏览器上工作吗?

如果不是,那么实现我正在尝试的目标的最佳方法是什么(我可能必须解析响应以将<script>元素与其他元素分开)?

首先要感谢大家!

EN

回答 3

Stack Overflow用户

发布于 2011-04-08 01:02:16

好吧,有两个问题,第一,这不是最好的解决方案(可能会在浏览器上崩溃),第二,如果代码不是硬编码的(即使这样),很容易造成xss漏洞。如果ajax的html或url是可变的,你就会遇到麻烦了。

基本上,我不推荐它,我会寻找一个替代的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2011-04-08 01:15:49

jQuery的.html()函数使用innerHTML,而IE要求在以这种方式加载的脚本上设置DEFER属性,否则这些脚本将无法执行。我认为createElement方法是一种更好的方法。

更进一步,我的观点是,最好只传输JSON,避免使用动态Javascript。然后,您可以使用JSON.parse解析响应,客户端代码可以对此数据执行任何必要的操作。

票数 0
EN

Stack Overflow用户

发布于 2011-04-08 02:32:56

听起来您想要做的事情可以通过JSON-P来完成。

基本上,不是进行XHR调用,而是动态创建一个script元素,该元素的SRC属性指向要加载的URL。然后,服务器将返回以下内容:

代码语言:javascript
运行
AI代码解释
复制
$('<div>foo</div>').appendTo('#bar');
alert(1);

好处是您可以进行跨域的JSON-P调用。缺点是,您仍然可以向XSS攻击敞开大门。但老实说,无论你做什么,这都是一个问题。只要你在你的Is和Ts上加点划线,我认为这两个选项都可以。

为了提供一个非eval/SCRIPT选项,您能描述一下您正在尝试执行的后续JS代码的性质吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5589297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档