Аутентификация htaccess с помощью PHP - PullRequest
1 голос
/ 27 апреля 2009

На текущем веб-сайте, над которым я работаю, у меня есть каталог файлов для загрузки пользователями, и было бы неплохо иметь какой-либо другой метод защиты, кроме неизвестности;)

Мне было интересно, есть ли способ предоставить информацию для входа в систему через PHP для htaccess, как если бы пользователь вводил ее.

С другой стороны, если кто-то знает лучший способ обеспечения безопасности пользовательских загрузок с помощью PHP, это также приемлемо. Все мои поиски в Google «просто используй htaccess», который не очень полезен, так как с точки зрения неопытного пользователя, они должны войти в систему дважды каждый раз, когда они используют веб-сайт.

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

Примечание: я не являюсь владельцем сервера, на котором он работает, и не имею доступа к ssh.

Ответы [ 6 ]

4 голосов
/ 27 апреля 2009

Если файлы не слишком большие (Гб), вы всегда можете использовать readfile для загрузки файла. В этом режиме вы можете проверить аутентификацию пользователя и, если все в порядке, вывести содержимое файла пользователю, в противном случае отправить его на страницу входа.

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

3 голосов
/ 27 апреля 2009

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

Пример со связанной страницы на php.net:

Пример # 1 Использование fpassthru () с двоичными файлами

<?php

// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// dump the picture and stop the script
fpassthru($fp);
exit;

?>

Кто-то еще прокомментировал необходимость сообщать правильный тип контента, что является правдой. Часто, по собственному опыту, я это уже знаю или могу использовать расширение файла довольно легко. В противном случае вы всегда можете взглянуть на finfo_file . На этой странице также есть некоторые комментарии о том, что вы могли бы сделать, особенно для изображений.

1 голос
/ 27 апреля 2009

Вы должны использовать PHP-скрипт для контроля доступа. создайте каталог вне web-корня или внутри него с помощью .htaccess, где вы размещаете файлы для загрузки.

лучше не использовать webroot.

Вы должны убедиться, что никто не сможет получить доступ к этим файлам, если они находятся внутри.

затем возьмите из класса груши lib. класс http_download.

использование этого класса имеет много преимуществ.

  • Диапазоны (частичная загрузка и возобновление)
  • Основные возможности кэширования
  • Базовый дроссельный механизм
  • gzip-сжатие на лету
  • Доставка сгенерированных на лету архивов через Archive_Tar и Archive_Zip
  • Отправка больших объектов PgSQL без необходимости читать все данные перед отправкой

вы не должны использовать readfile или любой перенаправляющий указатель файла, потому что вы должны сами устанавливать заголовки, а не поддерживать http "range".

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

груша - http_download http://pear.php.net/package/HTTP_Download

вам нужно скопировать URL, потому что SO кодирует его в строку в кодировке URL (что правильно), но PEAR-homepage не нравится.

0 голосов
/ 28 апреля 2009

Используйте X-SendFile! Существуют расширения для Apache, Lighty и Nginx, поэтому есть большая вероятность, что они есть для вашего веб-сервера.

После того, как вы установили расширение, вы можете аутентифицировать пользователя, используя ваш PHP-скрипт, а затем добавить заголовок:

header('X-SendFile','/path/to/file');

Когда ваш PHP-скрипт будет готов, он запустит веб-сервер для потоковой передачи файла для вас. Это особенно эффективно, если вы используете PHP вместе с, например, FastCGI, потому что это освобождает процесс PHP для другой работы.

Эверт

0 голосов
/ 27 апреля 2009
  1. Вы можете использовать MySQL для хранения загруженных файлов, вместо того, чтобы хранить их в файле, по моему мнению, лучше и безопаснее. Например, Google "MySQL upload php".
  2. Вы можете создать файл htaccess с помощью скрипта PHP из таблицы пользователей, каждый раз, когда пользователь обращается к этой папке, что очень хлопотно.

Я думаю, что первый вариант лучше.

0 голосов
/ 27 апреля 2009

Зачем изобретать велосипед? Взгляните на File Thingy , который довольно прост в установке и настройке. Если ничего другого, вы можете изучить источник, чтобы узнать, как выполнить шаг аутентификации.

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