如何防止通过URL直接访问php页面

slhcrj9b  于 2023-08-02  发布在  PHP
关注(0)|答案(6)|浏览(201)

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

bmp9r5qi

bmp9r5qi1#

你不能。你想要的是不可能的。
对于服务器端,没有办法知道URL是键入的还是单击的。

zphenhs4

zphenhs42#

如果我理解正确的话,您想要的是阻止用户访问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时是否有正确的值关联到用户。如果没有,他们试图直接访问该页面。

lyfkaqu1

lyfkaqu13#

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

mzillmmw

mzillmmw4#

也许你可以试试这个,在你的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.');
}


希望这对你有帮助,祝你有美好的一天。

ulmd4ohb

ulmd4ohb5#

根据您的问题:
您可以采用两种方法:
1.使用HTTP_REFFRER并检查所需的页面,如果用户来自你想要的页面。如果他正在访问直接URL,然后向他显示错误页面。
1.使用$_SESSION,但这种方法可能是有害的,因为SESSION将一直存在,直到浏览器/示例关闭。
所以最好是第一种方法。而且根据Pehaa,你不能检查id URL是键入

nmpmafwu

nmpmafwu6#

如果“HTTP_REFERER”不包括您的服务器,您可以重定向到您的域主页

<?php 
    //Avoid url direct access
    if (strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') !== FALSE) { 
     //Your code
    } else { 
        echo '<meta http-equiv="Refresh" content="0; url=https://yourdomain.com" />'; 
        die(); 
    }
?>

字符串

相关问题