Замените AuthUserFile на сам пароль или укажите относительный путь к папке

У меня есть PHP-скрипт, который создает 100 каталогов, и в этих каталогах содержатся CSV-файлы. Я могу защитить эти CSV файлы с помощью AuthUserFile, если он указывает на абсолютный .htpasswd файл, но я хочу указать на пользовательский сгенерированный .htpasswd в каждой из этих директорий.

  • Есть ли способ заменить: AuthUserFile на сам пароль? У меня он уже сгенерирован в моем PHP-скрипте.
  • ИЛИ как я могу сослаться на файл .htpasswd в той же директории, в которой он находится. Следующие действия не работают: AuthUserFile './htpasswd'
1
задан 16 June 2021 в 23:49
1 ответ
  • Есть ли способ заменить: AuthUserFile самим паролем? Я уже создал это в моем PHP-скрипте.
  • ИЛИ как я могу сослаться на файл .htpasswd в том же каталоге, в котором он находится. Выполнение следующих действий не работает: AuthUserFile './htpasswd'

К сожалению, вы не можете сделать ни одно из этих действий. AuthUserFile (например, HTTP-аутентификация) требует абсолютного пути к файлу (или относительного пути к ServerRoot ) и синтаксис выражения Apache не поддерживается, чтобы сделать этот «динамический» AFAIK (как и некоторые другие директивы в Apache 2.4, например, ErrorDocument ).

Однако, поскольку вы создаете каталоги, вы могли бы предположительно создать файл .htaccess (?) И соответствующие файлы .htpasswd для каждого каталога? Однако файлы .htpasswd не должны никогда храниться в каталоге, который они защищают, или даже в общедоступном пространстве HTML. Они должны храниться вне дерева общих каталогов, над корнем документа. (И, вероятно, вы изначально хотели избежать нескольких файлов .htaccess , хотя с вашими предложениями я не уверен в этом?)

В качестве альтернативы, поскольку вы уже используете PHP для генерируя эти каталоги, и ваш PHP-скрипт уже знает соответствующие пароли, тогда почему бы не использовать PHP для управления доступом к файлам CSV?

Например:

  1. Используйте Apache mod_rewrite для внутренней перезаписи запроса для любого «защищенного» .csv файл в сценарий PHP.Например:

     RewriteEngine On 
     
     # Все запросы для файлов ".csv" в дереве каталогов "/ foo /" направляются в "/serve-csv.php"{{1 }} RewriteRule ^ /? Foo /.+ \. Csv $ /serve-csv.php [L] 
     
  2. Сценарий PHP знает запрошенный файл (например, $ _ SERVER ['REQUEST_URI '] ) и пользователей / пароли, которым разрешен доступ к этому файлу.

  3. PHP может управлять базовой аутентификацией HTTP (это , похоже, вы используете ) или реализовать свой собственный интерфейс аутентификации (HTML-формы и т. Д.).

  4. Если пользователь аутентифицирован, PHP читает запрошенный файл и обслуживает этого клиента.

0
ответ дан 28 July 2021 в 13:22

Теги

Похожие вопросы