PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям?

У меня есть веб-сайт, на котором пользователи должны иметь возможность войти в систему и прослушать песню (созданную самостоятельно). Я хочу сделать так, чтобы зарегистрированный пользователь мог прослушивать / скачивать / независимо, а файл должен находиться на сервере (не храниться в базе данных MySQL), но не может быть доступен не-пользователям, у которых есть путь к URL-адресу.

Например, скажем, мой mp3 находится на mysite.com/members/song.mp3. Если вы вошли в систему, вы сможете увидеть страницу mysite.com/members/index.php, которая позволит получить доступ к песне. mp3-файл. Если вы не вошли в систему, страница mysite.com/members/index.php не покажет вам файл song.mp3, и ссылка на него не должна предоставлять доступ.

Я уверен, что это делается через htaccess, и я уже много сделал для Googling и искал здесь. Два самых близких ответа, которые я нашел, это htaccess guide http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/ и этот вопрос StackOverflow. Блокируйте прямой доступ к файлу через http, но разрешите доступ к скрипту php, но не отвечайте на все мои вопросы, чтобы соответствовать моим критериям. Что мне не хватает?

Related of "PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям?"

В члены папки создаются новые файлы папок, переместите сюда все ваши песни, создайте новый файл .htaccess и добавьте следующие строки:

Order Deny,Allow Deny from all 

В члены папки создайте файл get_song.php и добавьте следующий код:

 if( !empty( $_GET['name'] ) ) { // check if user is logged if( is_logged() ) { $song_name = preg_replace( '#[^-\w]#', '', $_GET['name'] ); $song_file = "{$_SERVER['DOCUMENT_ROOT']}/members/files/{$song_name}.mp3"; if( file_exists( $song_file ) ) { header( 'Cache-Control: public' ); header( 'Content-Description: File Transfer' ); header( "Content-Disposition: attachment; filename={$song_file}" ); header( 'Content-Type: application/mp3' ); header( 'Content-Transfer-Encoding: binary' ); readfile( $song_file ); exit; } } } die( "ERROR: invalid song or you don't have permissions to download it." ); 

И теперь вы можете использовать этот URL для получения файла песни:
http://mysite.com/members/get_song.php?name=my-song-name

Единственное, что вы можете сделать для этого через .htaccess, – это запрос, который приходит с вашего сайта, и он НЕ безопасен. это далеко не тривиально подделывать референта, и любой может сосать ваш сайт сухим.

Единственный способ, которым вы сможете иметь только зарегистрированные пользователи, загрузить файл, разместив файл OUTSIDE вашего веб-сайта и получив доступ к PHP-скрипту. Вкратце:

 if (is_logged_in()) { readfile($name_of_file); } else { die("Access denied"); } 

Используете ли вы язык сценариев, например PHP, для обработки вашего сайта? если это так, лучший способ – создать скрипт, который обрабатывает «доставку» содержимого. Сохраните содержимое в защищенном каталоге, то есть над вашей папкой http или www. Затем, когда пользователь войдет в систему, ссылка на ваш контент будет выглядеть так:

http://yoursite.com/listen.php?song_id=xxx

сценарий найдет нужную песню по идентификатору, а затем представит данные пользователю