2013-09-26 123 views
0

直接访问PHP页面我的index.php包括像如何防止通过URL

<?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?

+1

使用htaccess重定向你的请求 –

+0

这不能以一个好的方式完成。你的目标是什么 - 安全性? –

+0

我看到的唯一可行的解​​决方案是使用会话。保存用户是否访问过main.php之前或未访问会话,并在提交内容之前在index.php中检查它。 – CBroe

回答

0

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

1

你不行。你想要的东西根本不可能。

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

+0

这实际上是正确的答案(忽略检查引用者的可能性,这可能是伪造的。) –

+0

WTF? 3 downvote。lulz – PeeHaa

+0

不是我的失望,但我认为在输出模板中的链接时,可以通过生成随机ID来完成操作系统想要的内容(精神上,如果不是字母)。是否所有这些都是必要的,当然是一个不同的问题 - 这听起来像是一个XY问题 –

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时检查是否存在与用户相关的正确值。如果不是,他们试图直接访问该页面。

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.'); 
} 

希望这有助于,有美好的一天。

0

根据你的提问:

有,您可以按照两种方法:

  1. 使用HTTP_REFFRER和检查所需的页面上,如果用户是从u想的页面来。如果他正在访问直接URL,然后向他显示错误页面。
  2. 使用$_SESSION但这种方法可能是有害的,因为SESSION将始终存在,直到浏览器/实例关闭。

所以最好去第一种方法。 也根据Pehaa,你不能检查ID URL是否输入