Ограничить доступ к личным изображениям

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

Когда пользователь входит в систему и видит свои личные изображения, он заметит, что URL-адрес говорит следующее (когда он загружает его / щелкает по нему / и т. Д.): Www.mywebsite.com/FOLDER_NAME/IMG_123.jpg

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

На данный момент пользователь может видеть свои личные изображения только в том случае, если его user_email (unique) совпадает с userRow:

if ($userRow['user_email'] == "[email protected]")

Я не совсем уверен, что искать. Ограничить доступ к изображениям не удалось для меня.

Что я могу сделать? Я предполагаю, что можно было бы назвать папки чем-то случайным, например: "Charles661846Xkdfdsnf34590u". Об этом будет сложно догадаться, но я не уверен в безопасности (например, есть ли другие способы получить доступ к корню?).

Я просмотрел Запретить прямой доступ всем. php, кроме index.php, но это не совсем то, что мне нужно.

Что мне делать в таком случае?

Я запрограммировал свой сайт на php, html и немного javascript.


person Charles    schedule 03.04.2016    source источник


Ответы (2)


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

Затем вы обслуживаете файлы после аутентификации пользователя через php. См., Например, первый пример на странице readfile() руководства по php.

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

person jeroen    schedule 03.04.2016

В дополнение к тому, что сказал Джерун, вы на правильном пути в определении того, что имя папки может быть слабым местом, и что его должно быть трудно / невозможно угадать. Нет необходимости называть папки в честь пользователей; вы можете создать случайную буквенно-цифровую строку из 8, 12 или 16 символов и сохранить ее в userRow как, возможно, $userRow['folder_name'].

Вы также можете поместить все пользовательские папки в структуру типа http://example.com/storage/A97LD34B2 и убедиться, что в папке storage есть .htaccess файл с:

Options All -Indexes

Это все, что вам нужно в этом текстовом файле. Это, конечно, предполагает, что у вас есть веб-сервер Apache (наиболее распространенный, особенно для учетных записей общего хостинга). Этот файл не позволит мистеру Снупи перейти к http://example.com/storage и просмотреть список файлов.

Вот два С.О. вопросы, которые описывают, как построить защищенную паролем систему только для членов:

Войдите на веб-сайт и получите html из страница

PHP - защищенные страницы только для членов с логином система

Обратите внимание, что каждая папка будет содержать index.php файл, который будет обслуживать файлы, как описано в jeroen.

person cssyphus    schedule 03.04.2016