【问题标题】:$_SERVER["HTTP_REFERER"] is empty after redirect$_SERVER["HTTP_REFERER"] 重定向后为空
【发布时间】:2013-09-11 10:36:57
【问题描述】:

我不想让用户在网络浏览器中手动键入 URL。 它可能导致黑客攻击。 所以如果 http referer 为空,它应该重定向到主页。

我在 drupal web 应用程序的 index.php 中编写了这个 php 代码。

if($_SERVER["HTTP_REFERER"] == "")
{
    header("Location:http://mysite.com"); 
}

问题是循环无限继续。它从不显示主页。 $_SERVER["HTTP_REFERER"] 始终为空。

在 Firefox 中,我收到以下错误。 页面未正确重定向 Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。

如何解决?

【问题讨论】:

  • 任何想要入侵您网站的人都可以轻松欺骗引用标头,并且在许多合法情况下不会发送该标头。放弃这种方法。
  • HTTP_REFERER 不会为空,如果“黑客”从他们的网站上请求您的网站,那么它不会让您免于“黑客攻击”,而且它会让您更加头疼,根据你的帖子。考虑改变方式。
  • 了解基本的网络安全,您可以轻松解决这个问题。
  • 好的。一疑。 index.php [从 header("Location:localhost") 重定向后] 中的 $_SERVER["HTTP_REFERER"] 的值是多少?
  • 毫无疑问。 php.net 的文档:Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.php.net/manual/en/reserved.variables.server.php

标签: php .htaccess drupal redirect


【解决方案1】:

您发布的代码正在发挥作用。如果人们试图在没有引用者的情况下访问您网站的根目录,那么它当然会永远循环。

替换指向服务器上不同页面的header("Location:http://mysite.com"); header("Location:http://mysite.com/no_referer.php");,当然,创建一个名为no_referer.php 的页面,其中包含一些内容告诉他们。

由于代码会不断检查引用者是否来自您的网站,因此需要三个不同的页面,它们如下:

  1. index.php (假设这就是你的索引文件的名称)
  2. welcome.php
  3. no_referer.php

一个用于索引,一个用于欢迎访问,一个用于不良引用。

试试这个并给它一个条件。

(在您的 index.php 文件中)

<?php
if($_SERVER["HTTP_REFERER"] == "")
{
    header("Location:http://mysite.com/no_referer.php");
exit;
}

else {
    header("Location:http://mysite.com/welcome.php");
exit;   
}
?>

要使用href 进行测试,请使用以下内容并创建一个名为test_referer.php 的页面,该页面将用作您的index.php 文件。

<a href="referer_test.php">Referer test</a>

然后将上面的代码 (the code that checks for a referer) 复制到一个名为 referer_test.php 的文件中,并相应地创建名为 no_referer.phpwelcome.php 的其他页面,其中包含各自的内容。

【讨论】:

  • 不应该是三页... 在下面的代码之后,Gurunathan 可以照常继续他的索引页: if($_SERVER["HTTP_REFERER"] == "") { header ("位置:example.com/no_referer.php");退出;}
  • 有时候根本没有设置referer,所以会失败$_SERVER["HTTP_REFERER"] == "",应该是isset($_SERVER["HTTP_REFERER"]) && !empty( $_SERVER["HTTP_REFERER"])
【解决方案2】:

正确的检查应该是:

if (isset($_SERVER["HTTP_REFERER"]) && !empty($_SERVER["HTTP_REFERER"]))
{
   ... do something with referer
}

因为 $_SERVER["HTTP_REFERER"] == " 在没有设置referer时会报错。

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2020-05-15
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2023-03-31
    相关资源
    最近更新 更多