Internet Explorer http referer问题

时间:2008-12-31 01:48:57

标签: internet-explorer http

似乎我遇到了Internet Explorer 7的问题。 我有一个html页面,其中包含指向另一台服务器上的文件的链接。我链接的服务器检查请求的引用者,如果引用者有效,它允许访问资源。它在firefox 2和3中工作正常(因为我的html页面所在的服务器是一个有效的引用程序)但在Internet Explorer中它不起作用,其他服务器拒绝我的资源(生成http 403错误)。我正在做一些搜索并偶然发现这个http://support.microsoft.com/kb/178066并且我已经尝试了https和http中的html页面以及我连接的服务器的相同内容但我没有得到任何Internet Explorer。我该怎么做才能解决这个问题?

谢谢

6 个答案:

答案 0 :(得分:13)

你是如何“找到”有问题的文件的?

如果您使用JAVASCRIPT进入该文件,IE将失败。

自从时间开始以来,IE就遇到了一个重大错误。

e.g. document.location.href = 'myNewPage.html'; //FAILS to pass referer in IE

Bug #421 over on Web Bug Track

也不会在IE8中修复! : - (

答案 1 :(得分:3)

无论如何,您可能想要使用其他机制。推荐人很容易被欺骗。检查引用者确实不是一个好的安全解决方案,如果它们会让你头疼这样,也许你想找到另一种方式。

例如,生成第一页的服务器可以向第二服务器的URL添加授权令牌,第二服务器可以检查令牌是否有效。这样,所有细节都在您的控制之下,您所依赖的唯一浏览器行为是将完整的URL发送到第二台服务器。

答案 2 :(得分:3)

我在http://dracoblue.net/dev/referer-with-documentlocation-is-broken-in-internet-explorer/145/找到了这个解决方案,但我没有尝试过自己

function goto(url)
{
    var referLink = document.createElement('a');
    referLink.href = url;
    document.body.appendChild(referLink);
    referLink.click();
}

答案 3 :(得分:2)

我已经解决了,在项目的所有页面中包含此代码

session_start();
if($_SERVER['SERVER_PORT'] == 443 )
    $http = 'https://';
else
    $http = 'http://';

$adress = $http.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];  

$_SESSION['referer'] = $_SESSION['current_page'];
$_SESSION['current_page'] = $adress;
$_SERVER['HTTP_REFERER'] = $_SESSION['referer'];

答案 4 :(得分:1)

我没有使用IE7,所以我无法检查..但我想这应该没有问题:

<script type="text/javascript">
      document.location= "www.your-server.com/your_page.html?referrer=" + document.location.href;
</script>

而在第二台服务器上,您可以检查referrer参数的值,而不是依赖于浏览器是否发送引荐来源。

答案 5 :(得分:-3)

禁用防火墙,防病毒/反间谍软件检查并查看是否有帮助。我知道这可能听起来有些不可思议,但我亲眼看到很多情况,当这个建议被采纳时,问题奇迹般地消失了。

他们往往对“安全”有一种过分热心的想法,并在进程中打破浏览器行为。 (如果你有AVG并且有电子邮件问题(pop3),请关闭AVG并观看电子邮件,然后神奇地恢复工作状态)