Intereting Posts

CodeIgniter – пользователи должны иметь доступ только к своим изображениям

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

Так что в основном сайт работает. Но дело в том, что файлы не являются частными. Пользователь может захотеть убедиться, что файлы, которые пользователи загружают, видны только им, а не тем, кто просто догадывается кучу URL-адресов. (например, user1 uploads image1, который он хочет сохранить частным, для себя => [localhostlocalhost / upload_script / files / image1.jpg], user2 может получить доступ к image1, угадывая и набирая url [localhost / upload_script / files / image1.jpg] это то, чего мы не хотим.) Я провел некоторое исследование, и я думаю, что для этого, вероятно, потребуется другой контроллер для обслуживания файлов (который проверяет данные сеанса). Я уже давно играю с сессиями и т. Д. В PHP, но я не знаком с ними в CodeIgniter. Это единственный способ? Я не думаю, что мне нужно создавать отдельные каталоги для каждого пользователя, не так ли? Не могли бы вы рассказать мне, как двигаться в правильном направлении или дать мне пример?

Заранее спасибо,

harris21

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

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

Фрагмент кода, который вы можете добавить в свой контроллер CI для отображения изображения (адаптированного с страницы mod_xsendfile):

 ... if ($user->isLoggedIn()) { header("X-Sendfile: $path_to_somefile"); header('Content-Type: image/jpeg'); exit; } 

Если вы не можете установить mod_xsendfile, то единственным вашим вариантом будет использование readfile() как говорит TheShiftExchange.

Используйте PHP для возврата изображений и блокировки каталога изображений за корнем веб-сервера. Таким образом, перед подачей изображения вы можете проверить учетные данные пользователя с помощью переменной сеанса, убедившись, что ему разрешено просматривать изображение. В противном случае вы можете перенаправить пользователя прямо на веб-сайт, предупреждая его, что у него нет доступа. Обслуживание изображений, подобных этому, происходит медленнее, чем просто обслуживать их через веб-сервер (apache, nginx, …), но это позволит вам контролировать загрузку изображений.

Точнее, сохраните данные изображения в базе данных, например, имеющие столбцы: id, file_path, title, uid. Каждый раз, когда пользователь хочет загрузить изображение, например, вызывая http://domain.com/files/download/3, вы можете проверить, можно ли загрузить изображение с идентификатором 3 для текущего пользователя. Вам нужно написать свой собственный контроллер, который будет это делать.

Я делаю аналогичную вещь здесь http://www.mediabox.si/, вы можете проверить, как изображения обслуживаются. Я разрешаю миниатюры, и я являюсь водяным знаком, чтобы увидеть большие изображения, видимые обычным посетителям.

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

Используйте контроллер, чтобы проверить, разрешен ли пользователю доступ к файлу и функция чтения файла php (), чтобы обслуживать файл

Вы можете прочитать код по одному из моих других вопросов здесь: защищает ли эта функция PHP от передачи файлов?

И это на самом деле ОЧЕНЬ быстро – вы не заметите удар производительности вообще