Как защитить файлы от несанкционированной загрузки

Я создаю сайт членства, используя PHP и базу данных MySQL, у меня есть средства для входа в систему, используя их имя пользователя и пароль. Все довольно стандартное.

Я даже получил систему, позволяющую зарегистрированным пользователям загружать образцы видеофайлов. Это отлично работает.

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

Скажем, у нас есть основная папка, содержащая видеосодержание под названием «видео», а внутри «видео» у нас есть подпапки, такие как «самолеты», «поезда» и «автомобили» с отдельными папками внутри каждого из них (например, «струи» ',' prop 'и' spy 'для' самолетов ') с определенными видео для каждой подкатегории.

Поэтому, если кто-то знает файловую систему, они могут просто набирать https://www.myvideosite.com/videos/planes/jets/f15.wmv и загружать их содержимое, если они знают имена файлов. (Как вы можете видеть, у меня есть безопасное соединение, и оно находится на сервере Apache под управлением Linux.)

Это главное отверстие безопасности, которое я хотел бы подключить, прежде чем он будет обнаружен. Я исследовал .htaccess, но мои усилия с этим часто приводят к тому, что вся папка «видео» недоступна (я буду признателен, я новичок во всем этом!).

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

Проще говоря, как я могу отключить загрузку людьми, которые не являются членами, но кто может обнаружить (каким бы то ни было способом), что такое файловая система? Это должно быть простым, на мой взгляд, но, увы, я не нахожу твердого ответа.

Вы можете защитить свою папку видео с файлом .htaccess и «маршрутизировать» все запросы через php-скрипт:

 RewriteEngine on RewriteRule (.*) index.php?file_id=$1 [L] 

И выполните аутентификацию в index.php

 session_start(); // get filename from database or somewhere else $filename = getFilename($_GET["file_id"]); if ($_SESSION["is_logged_in"]) { readfile($filename); } 

Вот ответ, если у вас возникли проблемы с .htaccess

Итак, если вы используете это public_html, перейдите в его родительский каталог, создайте имя каталога «videos». (если не в public_html, возможно, вам придется добавить некоторые ../ в путь). Pathinfo заботится о проблеме проверки и возвращает только имя файла, если кто-то пытается прокрасть туда путь. Если вы назовете его download.php, то:

download.php? видео = fun.mp4

загрузит файл с именем fun.mp4 из каталога видео.

 <?php // do your user authentication $video_directory = "../videos/"; $file = pathinfo($_GET["video"], PATHINFO_BASENAME); if( $user_is_logged_in ) { if( file_exists( $file ) readfile( $video_directory . $file ); } ?> 

Используйте простой .htaccess / htpasswd аутентификацию, дайджест или базовый:

http://www.askapache.com/online-tools/htpasswd-generator/