如何克服这个安全问题

Ale*_* R. 28 javascript security ajax https asp.net-mvc-2

我已经实现了一个ajax-polling脚本,每10秒调用服务器控制器中的一个动作.通过响应,我替换了以下内容div:

function getFoo() {
    var link = '/Secure/GetFoo';

    $.post(link, function (response) {
        $('#FooSection').replaceWith(response);
    });

    setTimeout("getFoo();", 10000);
}
Run Code Online (Sandbox Code Playgroud)

这是通过https完成的.在"空闲"一段时间后,IE显示以下消息:

此页面正在访问不受其控制的信息.这带来了安全风险.你想继续吗?

如果用户单击" 是",则页面将重定向到div仅显示响应.如果用户单击" 否",则不会执行任何操作,但div不会刷新容器.

我知道我可以通过浏览器设置来抑制此消息,但这将使我按照上面的对话框进入默认的Yes选择.

之前已经提出类似的问题,但不幸的是没有任何解决方案.我基本上想要在安全连接上进行ajax-polling工作.有任何想法吗?

Eri*_*Law 15

您永远不应该在Internet-Zone页面上看到该对话框.默认情况下,此操作在Internet区域中以静默方式自动阻止.

该对话框出现在Intranet区域中有两个根本原因:

1>尝试使用XMLHTTPRequest对象执行跨源请求(http://blogs.msdn.com/b/ieinternals/archive/2011/04/22/ie-security-prompt-page-accessing-cross-domain - 信息 - 未处于其-control.aspx)

2>尝试将托管HTML的OBJECT标记导航到跨源页面.

您可以通过使用XDomainRequest而不是XMLHTTPRequest来避免大小写#1.您可以使用IFRAME而不是OBJECT标记来避免大小写#2.

  • 所以我们必须提出两个解决方案,一个用于每个浏览器,但IE和一个用于IE.那太好了. (3认同)

Mic*_*sen 5

前几天我遇到了类似的问题,无法找出为什么IE会在AJAX请求后抱怨.

我使用了Firebug的网络控制台,只是逐个完成了请求,直到我找到了一个http://而不是https://,我建议你这样做 - 我们几乎不可能在没有它的情况下进行调试看到页面,但它可能只是没有通过https加载的背景图像.

注意: 我确实注意到你说它是IE,但是像这样的问题可能不是浏览器特定的,Firefox/Chrome就像IE那样对非https元素没有做同样的大惊小怪.

  • @Alex我不认为HTTP响应代码会有任何区别,只要它仍然是HTTPS,很奇怪.虽然302是重定向,但重定向目标可能不是HTTPS? (2认同)