2015-07-15 1 views
1

У меня есть раздел моего сайта, который я бы хотел защитить. Я создал php-скрипт для аутентификации паролей и после аутентификации, я бы хотел, чтобы они были направлены на html-страницу.Предотвращать прямой доступ к html-файлу, но разрешать через PHP?

www.mywebsite.com/protectedfolder/index.html 

Я не хочу, чтобы пользователи взять выше URL, вставьте его в свои браузеры и иметь доступ к странице, однако. Должен ли я добавить что-то в файл .htaccess?

+0

Вы спрашиваете, как запретить пользователям доступ к странице, если они не вошли в систему? – UnstableEagle

+0

У меня нет управления входом в систему, это просто пароль, который, если нужно, направлять их на страницу html. – PaulG

+1

Возможно, лучше всего установить идентификатор сеанса, а затем разрешить людям доступ к этой странице, если у них есть набор сеансов – nomistic

ответ

2

добавить это в файл .htaccess в родительской папке:

RewriteEngine On 

RewriteBase/
RewriteRule ^protectedfolder/index\.html$/[NC,R,L] 
# OR THIS TO PROTECT ALL FOLDER 
# RewriteRule ^protectedfolder/[NC,R,L] 

или создать файл .htaccess в защищенной папке и записать это:

Order Deny,Allow 
Deny from all 
Allow from 127.0.0.1 

когда PHP скрипт работает и получает доступ к файлам, что делает от текущего пользователя (а не через http). поэтому при попытке прочитать файл из защищенной папки с помощью php's file_get_contents(), readfile(), fopen() и т. д. Правила apache не мешают php делать операции ввода-вывода с файловой системой.

, и если мы хотим, чтобы выходные файлы из защищенной папки для авторизованных пользователей, мы должны запустить что-то вроде:

if(hasAccess()) { 
    print readfile('path/to/protectedfolder/file.html'); 
} 
+0

К файлу .htaccess внутри защищенной папки? – PaulG

+0

no, в родительской папке – num8er

+0

Важно отметить, что вторая реализация блокирует любые попытки получить на сервере, который не вызывает 'loccalhost' в браузере, на том же компьютере, на котором работает этот сайт. – UnstableEagle

1

Я хотел бы использовать PHP и форму с вводом пароля, который обеспечит запрос POST на сервер.

<form action="index2.php" method="POST"> 
    <input name="pass" type="password" /> 
</form> 

Тогда в PHP

if (empty($_POST["pass"]) || $_POST["pass"] != "yourpasshere") { 
    header("Location index1.html"); 
    die(); 
} 
//your second page here 

EDIT: Вы также можете сделать это с помощью сеансов, где пользователь логины в определенном месте, вы даете им имя сеанса, как $_SESSION["name"] = "admin";, а затем проверить, что аналогично вышеприведенному с

session_start(); 
if (empty($_SESSION["name"])) { 
    header("Location index1.html"); 
    die(); 
} 
//your second page here 
+0

ваш второй ответ намного лучше – nomistic

+0

@nomistic Спасибо, мне нравится эта реализация гораздо больше, и я бы предположил, что так же, как обманщик реализует решение. Я отвечаю на вопросы респондентов, как они их спрашивали, прежде чем предоставлять личное мнение. – UnstableEagle

+0

, вы можете продемонстрировать, как настроить сеанс на странице входа, а затем показать, что они заблокированы на целевой странице. (переадресация заголовков хороша.Я также хочу убедиться, что ничего не видно, если скрипт разрывается на полпути, например, 'exit()') – nomistic

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