gpt4 book ai didi

jquery - IE8 XSS/Jquery 问题

转载 作者:行者123 更新时间:2023-12-03 22:37:40 25 4
gpt4 key购买 nike

在 Firefox 和 Chrome 中一切正常,但 IE8 (8.0.6001.18702) 除外

这是测试代码(Jquery 1.4.2)($.post 也有同样的问题):

$(function() {
$.get("http://domain2.tld/some.php", {}, function(response) {
alert(response);
});
});

此代码在domain1.tld中执行,并从domain2.tld加载,如下所示:

<script type="text/javascript" src="http://domain2.tld/test.js"></script>

我在 IE8 中收到“权限被拒绝”消息。到目前为止我已经尝试过但没有成功:

1)添加domain1.tld(php代码):

header("X-XSS-Protection: 0");

2) 在 IE8 选项中禁用 XSS 过滤器。

我正在使用 IE8 调试器,它在第 5113 行显示错误:

xhr.open(type, s.url, s.async);

如果我不调用 $.get(domain2.tld ...),而是调用 $.get(domain1.tld ...),则不会出现错误,这向我确认这是一个 XSS“同源策略”问题。

我唯一的解决方案(我认为)是通过代理(php 代码)来完成此操作,但我不想这样做,因为它会影响性能。

有人知道这个问题的替代方案/解决方案吗?

注意:更新 IE8 不是一个选项,因为我想在不更新的情况下测试它。

一个与我非常相似的问题: http://forum.jquery.com/topic/jquery-ui-tabs-ie8-and-injecting-elements-into-dom

最佳答案

如果我的英语不完美,我很抱歉,因为我可以看到我不够清楚......我的主要关注点之一由其他人在这里解释:http://forum.jquery.com/topic/cross-domain-ajax-and-ie

那么,还有什么替代方案吗?

1) XDomainRequest

我个人认为这是在 IE8+ 中实现跨站点脚本的最佳方式(因为它是原生支持的)。唯一的问题是,这是微软独有的方式。但正如 IE 系列的许多其他功能一样,我们可以轻松扩展 JQuery ajax 功能。

根据文档,您需要在domain1.tld for example, in PHP中指定一些附加 header 像这样:

header("Access-Control-Allow-Origin: http://domain2.tld"); //use * for any

也许下一个替代方案对于提供 XDomainRequest 的 jquery 实现很有用;

更新(a):有一个 XDR library (非jquery)它“替换”XHR类以使其跨浏览器,它基于pmxdr client library 。我还没试过。

2) CORS

这个插件的唯一问题是它不完全是一个扩展,因为它的函数命名不同,所以您需要更改代码或包装该插件。

更新(b):我修改了 CORS 插件以使其更容易。查看我的其他答案以获取代码。

3) JsonP in JQuery

这应该是解决我的问题的最简单的方法(因为我可以控制两台服务器)。大多数浏览器本身就支持跨站脚本,前提是使用 json 格式(我相信也可以使用 xml)。在这种情况下,使用 $.getJSON() 函数。为了使其工作,您需要指定(如文档所述)callback=?在 URL 中,例如:

$.getJSON("http://domain2.tld/index.php?callback=?",funciton(res){ ... }); 

“?”在您的 php 文件中,“callback”将被替换为标识符后,您需要获取该标识符并包围 Json 代码,如下所示:

print_r($_GET["callback"])."(".json_encode($mydata).");";

(我从 here 得到了这个例子)

此方法的问题在于,如果您只想检索 HTML,它必须驻留在 json 对象内,从而使过程变得更加复杂和难以承受。

4) jquery.jsonp plugin

如果您需要 JQuery 中原生 JSONP 支持的额外验证和功能,请尝试此插件,它也将简化流程。

5) xdomainajax

这个插件使用了一种有趣的方法,使用雅虎的服务 YQL,其中任何网页(或其一部分)都可以转换为 Json,从而可以将其导入 JavaScript。此方法适用于无法更改原始格式的情况。

6) flXHR

此解决方案使用 flash (swf) 来实现神奇效果。我可以说这是实现几乎完全跨浏览器实现的非常快速的方法(因为它依赖于闪存支持)。对于那些存在闪存的站点(当然),此方法可能是理想的选择。但是,如果您的网站不需要 Flash,那么这将成为主要缺点,因为用户应该安装 Flash 才能正常工作。

7) xdajax

该解决方案基于 YUI 实现以及“Flash”方法。

8)如果前面的选项都不适合您,请记住您仍然可以使用插入标签的老技巧来导入 JS 代码。

9) 将 IE 安全性降低到最低也可以解决问题。但我认为出现这样的消息并不好:“请降低您的安全设置才能使用此网站”...哈哈

希望这可以帮助其他遇到类似情况的人。

关于jquery - IE8 XSS/Jquery 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com