хранение изображений php - безопасность - PullRequest
0 голосов
/ 08 октября 2011

Полагаю, у меня есть 2 подхода для хранения изображений в приложении php: либо для сохранения их в базе данных, либо в папке с уникальными именами.Учитывая, что я хочу минимизировать соединения с базой данных, как я могу защитить папку, в которой есть изображения, загруженные пользователями?

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

/root/somefolder/{userid}{uniquenumber}.jpg

Если я настрою htaccess для предотвращения доступа к текущей папке, будет ли этого достаточно?Или я должен иметь некоторые другие меры безопасности?

Приветствия

Ответы [ 3 ]

5 голосов
/ 08 октября 2011

Либо для сохранения их в базе данных, либо в папке с уникальным именем

Базы данных оптимизированы для хранения небольших фрагментов данных, а не больших двоичных объектов. Вы получите лучшую производительность, если позволите обычной ОС и веб-серверу обрабатывать доставку файлов. Использование обычных файлов избавляет вас от необходимости заново реализовывать обработку заголовков кэша HTTP и запросов диапазона.

Но в любом случае эти ресурсы нуждаются в URL, поэтому вторая часть вашего вопроса по-прежнему актуальна.

Если я настрою htaccess для предотвращения доступа к текущей папке, будет ли этого достаточно?

Я должен думать, что этого будет достаточно. Пока уникальная часть длинна (например, "somefolder / 738b3093b898654bd3bbb9e3770e7fc0.jpg") и не следует шаблону, невозможно угадать ее.

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

Другое соображение заключается в том, что по мере роста такой системы, когда она получает огромное количество файлов, файловая система становится тяжелым бременем, если они находятся в одной папке. Вы можете легко предотвратить это, повторяя или разделяя часть имени в подпапках. Например, "somefolder / 7e / 7e8b3093b898654bd3bbb9e3770e7fc0.jpg".

1 голос
/ 08 октября 2011

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

1 голос
/ 08 октября 2011

Если вам нужна дополнительная защита, вы можете хранить свои файлы в папке вне публичного пути веб-сайта.Создайте страницу, например http://example.com/get_photo/?id=12345, где эта страница проверяет, что пользователь вошел в систему и имеет права доступа к фотографии, затем находит фактическое имя файла и включает этот файл в ответ.Помните, что вам нужно будет ввести правильный заголовок MIME-типа для вашего формата изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...