Какое лучшее место для хранения загружаемых PDF-счетов?

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

Где лучше всего хранить эти файлы?

/adminitrator/componentes/com_mycomponent/invoices

/componentes/com_mycomponent/invoices

/media/com_mycomponent/invoices

Как я могу предотвратить несанкционированный доступ непосредственно к загрузке этих файлов?

Как я могу запретить пользователям скачивать чужие счета-фактуры?

7 голосов | спросил Piero Marsilio 2 J0000006Europe/Moscow 2015, 12:06:06

6 ответов


7

Я бы посоветовал использовать

administrator/components/com_mycomponent/invoices 

Это связано с тем, что при использовании .htaccess в вашем каталоге администратора может возникнуть проблема. Например, с помощью инструментов администрирования Akeeba

Я бы предпочел также использовать медиа-папку.

Вы также можете обслуживать хешированные файлы с их соответствующими оригинальными именами:

<?php
header("Content-type:application/pdf"); 

// It will be called NICE_TITLE.pdf
header("Content-Disposition:attachment;filename='NICE_TITLE.pdf'");

// The PDF source is in HASHED_FILE.pdf
readfile("HASHED_FILE.pdf");
?>
ответил COBIZ webdevelopment 2 J0000006Europe/Moscow 2015, 14:07:59
6

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

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

Конечно, это зависит от того, как работает ваше приложение, но в идеале я бы имел данные счета в таблицах базы данных и при необходимости составлял счета-фактуры «на лету».

Мои два цента.

ответил Valentin Despa 2 J0000006Europe/Moscow 2015, 23:54:50
5

Просто подумал, что я брошу свои 2 цента (некоторые хорошие моменты в хэшировании имени файла).

У меня недавно была аналогичная проблема. Вместо того, чтобы беспокоиться о .htaccess, я просто сохраняю файлы выше public_html с параметром компонента, определяющим путь, а затем используя PHP-код readfile для извлечения и вывести PDF.

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

ответил codinghands 2 J0000006Europe/Moscow 2015, 14:32:08
3

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

Правильное место для хранения таких файлов на самом деле является папкой «images». Это место, где пользователь сможет легко управлять файлами с помощью медиа-менеджера. Папка «media» будет еще одним жизнеспособным выбором, но на самом деле это больше предназначено для хранения активов расширения, таких как CSS, JS и т. П.

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

Если это необходимо для защиты, либо не храните файл вообще, а динамически генерируйте его по запросу. Или сохраните его за пределами webroot и получите доступ к нему с помощью PHP. Нет другого безопасного способа.

ответил Bakual 3 J0000006Europe/Moscow 2015, 10:48:23
2

Использование следующей директории в качестве корня для всех счетов-фактур прекрасно:

administrator/components/com_mycomponent/invoices

Однако то, что я бы рекомендовал сделать, это хеширование имени файла после создания счета-фактуры. Например:

administrator/components/com_mycomponent/invoices/HASHED_FILE.pdf

Либо это, либо для каждого счета-фактуры создайте хешированный каталог и сохраните PDF-файл там, например:

administrator/components/com_mycomponent/invoices/HASHED_DIR/file.pdf

Update:

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

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

ответил Lodder 2 J0000006Europe/Moscow 2015, 12:12:58
2

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

DENY FROM ALL
ответил Nagarjun 2 J0000006Europe/Moscow 2015, 13:20:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132