2009-05-31 4 views
0

Я собирался использовать .htaccess для защиты паролем каталога для php-скрипта, который я пишу, поскольку я не доверяю своим навыкам PHP для создания безопасного входа в систему, но я узнал вас не может использовать относительные пути для AuthUserFile, и я не мог бы обобщить это.Защита безопасного пароля для пароля без .htaccess

Если бы вы могли направить меня на безопасный скрипт входа PHP, чтобы защитить паролем каталог, я был бы очень благодарен. Благодарю.

ответ

1

Единственное, что вы можете сделать, это сохранить все ваши «секретные» файлы в каталоге за пределами веб-сайта сервера. Затем доступ к этим файлам может быть перенаправлен через один PHP-скрипт внутри вашего каталога. Что-то вроде этого:

http://www.example.com/protected-directory/access.php?file=/foo/document.doc

С структурой каталогов, таких, как это:

+--+ /server_root 
    | 
    +--+ /web_root 
    | | 
    | +--+ /protected-directory 
    |  +-- access.php 
    |  +-- access-denied.html 
    | 
    +--+ /protected_root 
     | 
     +--+ /foo 
     +-- document.doc 

В вашей access.php вы могли бы сделать что-то вроде этого:

$file = $_REQUEST['file']; 
if ($user->hasAccessTo($file)) { 
    readfile("/server_root/protected_root/$file"); 
} else { 
    readfile('access-denied.html'); 
} 

Теперь, вы должны будьте осторожны, чтобы убедиться, что никто не прикручивает ваш file -параметр и пропускает что-то вроде "../../../etc/passwd". Кроме того, вы, вероятно, хотите убедиться, что вы отправили правильные заголовки в приведенном выше примере, я пропустил это из соображений ясности.

0

Вы можете использовать абсолютные пути к AuthUserFile и организовать размещение этого файла в недоступном для веб-сервера месте. Я делал это много лет. Работает отлично.

+0

Дело в том, что если я распространяю это, я не знаю, где пользователь собирается разместить сценарий или какую ОС они находятся. Поэтому я не думаю, что могу использовать .htaccess? – tom

+0

Вы все еще можете использовать .htaccess (и .htpasswd). В настройке Apache по умолчанию (по крайней мере, для Apache2) есть правило блокировать доступ к любому файлу с именем .ht * –

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