-2

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

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

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

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

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

如何解决?

4

2 回答 2

2

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

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

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

  1. index.php (假设这就是您的索引文件的名称)
  2. 欢迎.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在其中包含相应的内容。

于 2013-09-11T12:16:43.453 回答
0

正确的检查应该是:

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

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

于 2019-11-11T11:54:11.993 回答