2012-11-15 3 views
0

На одном из моих сайтов я использую $_SERVER['REQUEST_URI'], чтобы установить, может ли незарегистрированный пользователь видеть содержимое страницы или нет.

В руководстве там написано о $_SERVER['REQUEST_URI']:

URI, который был дан для того, чтобы получить доступ к этой странице; например, '/index.html'.

Мой вопрос заключается в том, может ли клиент получить доступ, например. index.php, хотя $_SERVER['REQUEST_URI'] содержит другое значение?

Я знаю, что $_SERVER['REQUEST_URI'] содержит страницу, спросил клиент, и сервер возвращает, но если я не задавала себе такого рода вопросы один раз в то время я не доволен

Также он считается хорошим Практиковать, чтобы использовать $_SERVER['REQUEST_URI'] таким образом?

EDIT: Я включил скрипт я использую, как это было слишком общий

list($c_page) = explode('.',substr($_SERVER['REQUEST_URI'],1)); 
define('C_PAGE',$c_page ?: 'index'); 
define('LOGGED',$_SESSION['user']['id'] ?: 0); 
if(in_array(C_PAGE,array('page_1','page_2','page_3')) && !LOGGED){ header('Location: login.html'); exit; } 
+0

Как '/index.php? Foo = bar' или'/index.php/path_info'? –

+0

Я включил сценарий, который я использую, поскольку он был слишком общим. – wlf

+2

Возможно, у вас был бы лучший способ установить такое ограничение доступа. –

ответ

0

В зависимости от softwarestack сервера вы используете эту переменную, заданную веб-сервером или оберткой fastcgi.

URL-адреса и непрозрачные прокси-файлы в стеке оборудования/программного обеспечения могут влиять на значение, которое вы видите в своем скрипте.

например. Nginx может переписать URL-адрес из /test.html в /index.php?action=test, а затем передать его на ваш веб-сервер. Пользователь вызвал бы /test.html, пока ваше приложение увидит /index.php?action=test

Заключение: REQUEST_URI - это URI, переданный на веб-сервер, и может использоваться как ссылка для элементов управления доступом на основе URL.

EDIT:

только, чтобы избежать путаницы, потому что я видел другие ответы ...

Ваш вопрос, как я понял: Вы хотите, чтобы проверить погоду Вы в данный момент запроса и уже пароль разрешенным у пользователя достаточно разрешений для доступа к определенным URL-адресам.Опять-таки, да, вы можете использовать запрос URI в качестве опорного значения

+0

Я не знал о REQUEST_URL. Странно, что он не указан здесь php.net/manual/en/reserved.variables.server.php, хотя он упоминается в комментарии. Я только что сделал print_r ($ _ SERVER) на веб-сайте с Apache в качестве веб-сервера и REQUEST_URL не был доступен, интересно, сколько поддержки он получает? – wlf

+0

Хорошая точка, опечатка, вызванная моей общей путаницей URI и URL, исправила мой ответ, который все еще действителен –

+0

Я знаю, что переписывание URL может быть проблемой для этого скрипта, если оно касается чего-либо от/до. Я не использую mod_rewrite и прокси, и поэтому мой вопрос касался клиентов, как я сказал «на любой стороне клиента». Это все еще самый интересный ответ, хотя :) – wlf

0

Лично я считаю его более надежным, чтобы объявить одну или несколько групп (классов) пользователей, которые должны иметь доступ к файл, а затем включить страницу, которая возвращает ошибку 401, если зарегистрированный пользователь, если не в какой-либо из этих групп. например

session_start(); 
... 
$access = 'admin'; 
include 'inc/guard.php'; 

Похоже, в вашем случае, если вы хотите «общественность» и «вошли в», который немного отличается, но это случай также охватывается мой охранник сценария. Там, я просто проверить, что переменная $_SESSION пуста (вставить материал в него на вход в систему):

if($access != 'public' && empty($_SESSION)) { 
    header('HTTP/1.1 401 Unauthorized', true); 
    include 'inc/login.php'; 
    exit; 
} 
1

Вы действительно должны отслеживать их вход с переменной сеанса (или печенья). Любой из них может быть заблокирован ... но они ближе к «надежной». Тем не менее, все может быть подделано ... поэтому используйте комбинацию и/или сильные уникальные строки, если безопасность имеет первостепенное значение.

+0

Он не сказал, что хочет заменить вход пользователя, а не проверять права доступа к текущему URL для текущего пользователя. Ему нужна прочная ссылка, которую нельзя манипулировать на стороне клиента. –

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