javascript - JS Code over AJAX with jQuery - 这种方法安全吗?

标签 javascript ajax jquery

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

响应中没有html/body/head元素,只有需要注入(inject)的HTML。所以响应可能是:

<div>lorem ipsum</div>
<script>alert(1);</script>

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

var script = document.createElement('script');
script.type = 'text/javascript';
script.text = response;
var head = document.getElementsByTagName("head")[0];
head.appendChild(script);

但是,我已经尝试使用 .html() 在 jQuery 中按原样嵌入响应 - 令我惊讶的是,似乎 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> 元素与其余元素分开)?

非常感谢!

最佳答案

好吧,有两个问题,首先这不是最好的解决方案(并且可能会在浏览器上中断),其次如果该代码不是硬编码的(即使那样),它很容易造成 xss 漏洞.如果 ajax 的 html 或 url 是可变的,您就会感到头疼。

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

关于javascript - JS Code over AJAX with jQuery - 这种方法安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589297/

相关文章:

javascript - 在服务器上保存图像错误

javascript - 在 reactjs 中添加带有查询字符串的外部 html 文件

javascript - 为什么设计决定使用不同的支架?

javascript - JQuery AJAX-如何从 URL 检索 JSON 数据?

javascript - 为什么我在nodeJS服务器上收不到文件?

jquery - DOMContentLoaded 在 Chrome 中非常慢

javascript - jQuery:$.when 延迟的 AJAX 调用——一个失败的调用会取消其他调用

javascript - 如何在我的项目中将 'ngProgress' 配置为加载器 [ngbp 样板文件]

javascript - 有谁知道关于创建基于 MVC 的组件/扩展方法的好文章?

javascript - 滚动到 div 的底部?