Как правильно загрузить и HTML-встраивать защищенные паролем файлы? - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть защищенный паролем каталог Apache, заполненный текстовыми файлами и файлами фильмов.В настоящее время я загружаю содержимое текстовых файлов, используя cURL, передавая имя пользователя и пароль информацию с CURLOPT_USERPWD.Для фильмов я установил для OBJECT и EMBED src значение http://username:password@example.com/file.mov.В обоих случаях имя пользователя и пароль извлекаются из $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] соответственно.Если это не работает, то пользователю предлагается ввести новые учетные данные с помощью общего всплывающего окна HTTP-аутентификации.

Есть ли более правильный способ сделать это?Или встраивание защищенных паролем фильмов - просто глючная / плохая идея?

Приведенный выше метод приводит к двум (связанным?) Проблемам.Во-первых (насколько я могу судить) случайным образом кажется, что часть username:password@ не пропускается при встраивании фильма, и, таким образом, пользователь вынужден снова вводить свои учетные данные.Такое случается редко и только раздражает, но было бы неплохо исправить.

Во-вторых, это приводит к сбою Safari под Snow Leopard.Safari, в обязательном порядке, запрашивает у пользователя учетные данные, а затем останавливается.Фильмы, не защищенные паролем (или перемещение фильмов, защищенных паролем, в каталог, не защищенный паролем), загружаются нормально.Эта проблема не существовала до Snow Leopard, но я не тестировал ее на старых версиях Safari под Snow Leopard, так что это может быть одно из последних обновлений, которые ее сломали.

ПРИМЕЧАНИЕ: К сожалению, переход на другую систему входа в систему (что исключает проблему) невозможен, поскольку другие программы, использующие файлы, требуют защиты паролем Apache.

1 Ответ

2 голосов
/ 15 сентября 2010

Вы в безопасном соединении? Иначе это выглядит так, как будто имя пользователя / пароль открыты для посторонних глаз?

Я бы хотел иметь сценарий на стороне сервера (например, serve_content.php), который управляет обслуживанием вашего защищенного контента. И ссылка на него что-то вроде:

src="serve_content.php?id=1234"

serve_content.php проверяет, что пользователь вошел в систему. Идентифицирует файл по переданному идентификатору (который маскирует истинное местоположение защищенного содержимого), поэтому «1234» может быть «mymovie.avi». И отправляет файл клиенту. например. используя readfile() с соответствующими заголовками.

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

...