2013-09-26 4 views
0

У меня есть index.php, которые включают в себя страницы какКак предотвратить прямой доступ к 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> 

Как я могу запретить пользователям формировать доступ к страницам непосредственно набрав «http://mydomain.com/?action=page1» на URL? И перенаправить их на main.php, если они это сделали?

+1

Используйте htaccess для перенаправления вашего запроса –

+0

Это не может быть сделано в хорошем смысле. Какова ваша цель - безопасность? –

+0

Единственное возможное решение, которое я вижу, - это использовать сеансы. Сохраните информацию о том, посетил ли пользователь main.php пользователя или нет в сеансе, и проверьте его в своем index.php перед доставкой содержимого. – CBroe

ответ

0

Проверьте для HTTP_REFERER и, если он не указывает на правильные значения (например, на вашу страницу), перенаправьте пользователя.

1

Вы не можете. То, что вы хотите, просто невозможно.

Для серверной стороны не существует способа узнать, набирается ли URL или нажимается.

+0

Это на самом деле правильный ответ (игнорируя возможность проверки реферирования, который можно подделать.) –

+0

WTF? 3 downvote.lulz – PeeHaa

+0

Не мой нисходящий сигнал, но я думаю, что OP хочет (по духу, если не букве), может быть сделано путем генерации случайных идентификаторов при выводе ссылок в его шаблоне. Нужно ли вообще все это, конечно, другой вопрос - это пахнет вопросом 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 и проверить на нужной странице, если пользователь приходит со страницы у хотел. ЕСЛИ он обращается к прямому URL, а затем показывает ему страницу с ошибкой.
  2. Используйте $_SESSION, но этот подход может быть вреден, поскольку SESSION всегда будет находиться до закрытия браузера/экземпляра.

Так что лучше пойти на 1-й подход. Также, как и в случае Pehaa, вы не можете проверить URL-адрес идентификатора.

Смежные вопросы