0

我有 index.php ,其中包括像这样的页面

<?php

define('MyConst', TRUE);

include_once('template/header.php');

if (!empty($_GET['action'])) {  
    $action = $_GET['action'];   
    $action = basename($action);   
    include("template/$action.php");   
} else { 
    include("template/main.php"); 
} 

include_once('template/footer.php'); 

?>

在模板目录中,我有 main.php,它链接到其他页面,如 page1.php、page2.php。

<a href="?action=page1">Goto page 1</a>
<a href="?action=page2">Goto page 2</a>

如何防止用户直接在 URL 上键入“ http://mydomain.com/?action=page1 ”访问页面?如果他们这样做了,将他们重定向到 main.php?

4

5 回答 5

1

如果我理解正确,您想要的是阻止用户访问http://example.org/?action=page1,除非他们来自http://example.org/?action=main. 为此,您必须能够检测它们是否来自http://example.org/?action=main. 最安全的方法是生成一些随机值,在用户访问时将其关联到用户,http://example.org/?action=main并在用户想要访问时检查是否存在与用户关联的正确值http://example.org/?action=page1。如果没有,他们会尝试直接访问该页面。

于 2013-09-26T12:52:01.883 回答
1

你不能。你想要的根本不可能。

对于服务器端,无法知道 URL 是被输入还是被点击。

于 2013-09-26T12:45:04.613 回答
0

也许你可以试试这个,在你的 index.php 上:

session_start();
if(! isset($_GET['action']))
{
   $_SESSION['pageAccess'] = true; # Set the key whatever you want
}

然后在该脚本下(我们需要使用两次 session_start() ):

if(isset($_GET['action']))
{
  if(! isset($_SESSION['pageAccess']) || ! $_SESSION['pageAccess'])
     exit('There is no direct access allowed.');
}

希望对您有所帮助,祝您有美好的一天。

于 2013-12-17T03:48:21.193 回答
0

检查 HTTP_REFERER 如果它没有指向正确的值(比如你的meny页面)然后重定向用户。

于 2013-09-26T12:45:03.157 回答
0

根据您的问题:

您可以采用两种方法:

  1. HTTP_REFFRER如果用户来自您想要的页面,请使用并检查所需的页面。如果他正在访问直接 URL,则向他显示错误页面。
  2. 使用$_SESSION但这种方法可能是有害的,因为SESSION在浏览器/实例关闭之前一直存在。

所以最好采用第一种方法。而且根据 Pehaa,您无法检查是否输入了 id URL

于 2014-08-19T03:22:49.697 回答