如何克服这个安全问题

时间:2011-06-09 08:39:19

标签: javascript ajax security asp.net-mvc-2 https

我已经实现了一个ajax-polling脚本,每10秒调用服务器控制器中的一个动作。通过回复,我替换了div

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

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

    setTimeout("getFoo();", 10000);
}

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

  

此页面正在访问信息   这不受其控制。这个   存在安全风险。你想要_____吗   继续?

如果用户点击,该页面将重定向到仅显示响应的div。如果用户单击,则不会发生任何事情,但div容器将不会刷新。

我知道I can suppress this message through browser settings,但这会让我按照上面的对话框选择默认的

类似的问题是asked before,但不幸的是没有任何解决方案。我基本上想要在安全连接上进行ajax-polling工作。有什么想法吗?

7 个答案:

答案 0 :(得分:15)

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

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

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

2 - ;尝试将托管HTML的OBJECT标记导航到跨源页面。

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

您的代码有两个方面:

为什么使用POST ajax请求?为什么不去GET? 您的请求看起来像一个GET请求(您想获得一些数据),因此GET方法可能是更好的选择。

它与您的问题没有关联,但您不应该将setTimeout与字符串一起使用到eval。你应该给setTimeout一个变量作为第一个参数,这个变量应该是你想要执行的函数。

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

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

    window.setTimeout(getFoo, 10000);
}

答案 3 :(得分:3)

您是否尝试过使用协议相关超链接//something.com/image.png)?请参阅this linkthis one

答案 4 :(得分:2)

如果在您的代码中甚至有一个元素的src属性以“http”而不是“https”开头,IE将显示该消息。

您确定要获取的数据在其src属性中没有src =“http:// ...”的元素吗?

答案 5 :(得分:2)

我之前看到过这种情况,因为通过ajax调用插入的新内容已链接到无安全图像资源,这是否是您遇到的问题?

答案 6 :(得分:2)

您尝试使用绝对网址吗?

var link ='https://www.yourdomain.com/Secure/GetFoo';