Ограничение доступа к странице, если не с определенной страницы - PullRequest
1 голос
/ 31 октября 2008

Я пытаюсь выяснить, как ограничить доступ к странице, если на страницу не переходят с определенной страницы «ворот». По сути, я хочу, чтобы страница была недоступна, если вы не переходите со страницы, которая предшествует ей в моей карте сайта. Я не уверен, что это даже возможно. Если возможно, можете ли вы ограничить свои предложения использованием html или javascript?

Ответы [ 5 ]

6 голосов
/ 31 октября 2008

Если возможно, можете ли вы ограничить свои предложения использованием html или javascript?

Нет. Поскольку нет безопасного пути , использующего только эти две техники. Все, что происходит на стороне клиента, можно манипулировать (тривиально легко). Если вы хотите быть уверены, вы должны применить это на стороне сервера, проверив заголовок REFERER (sic!).

Ум, даже этим можно манипулировать.

Если вы используете Apache с включенным mod_rewrite, следующий код ограничит доступ в соответствии со ссылкой на страницу:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/.*
RewriteRule /* http://www.example.com/access-denied.html [R,L]

РЕДАКТИРОВАТЬ: я только что проверил руководство ... к сожалению, дать код состояния 401 здесь невозможно. Таким образом, вышеприведенное решение не является идеальным, поскольку, хотя оно блокирует доступ, оно не устанавливает соответствующий статус HTTP. : - / оставляет неприятный вкус во рту.

5 голосов
/ 01 ноября 2008

Единственный эффективный способ - установить и проверить некоторый токен доступа на сервере (манипулировать любыми данными на клиенте тривиально, поэтому простого JS и HTML недостаточно; то же самое для заголовка Referer). Упрощенный пример в PHP:

gate_page.php:

<?php
session_start();
$_SESSION['allowed_access'] = true;
?><a href="protected_page.php">Protected area</a>

protected_page.php:

<?php
session_start();
if (!$_SESSION['allowed_access']) {
    header('Location: gate_page.php');
    echo 'Go through the <a href="gate_page.php">entry page</a> first.';
    exit();
}

// whatever happens to be at the protected page

Конечно, легко добавить некоторую проверку пароля и / или другие элементы безопасности, это минимум.

1 голос
/ 01 ноября 2008

Что делать, если вы зашифровали переменную (например, текущую дату) и поместили ее в ссылку "gate". Когда вы попадаете на новую страницу, скрипт расшифровывает переменную, и если она не совпадает или даже не существует, скрипт перенаправляет на другую страницу.

Что-то вроде:

<a href="restricted.php?pass=eERadWRWE3ad=">Go!</a>

Редактировать : Я не знаю JS достаточно хорошо, чтобы напечатать этот код, но я знаю, что есть несколько библиотек , которые могут выполнить все шифрование / дешифрование за вас.

0 голосов
/ 11 ноября 2008

document.history.previous должен дать вам URL последнего документа в объекте истории. В противном случае, нет лучшего способа сделать это с помощью HTML и Javascript.

0 голосов
/ 01 ноября 2008

С помощью javascript назовите переменную с именем «previous» и установите ее значение в document.referrer. Затем выполните условие, чтобы определить, является ли реферер правильной страницей, и если нет, перенаправьте их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...