Я работаю над инструментом, который в конечном итоге позволит пользователям покупать и скачивать файлы из Интернета. Мне интересно, как безопасно и безопасно размещать загружаемые файлы, чтобы неавторизованные пользователи не могли скачивать файлы, не купив их сначала.
Пользователи будут покупать файл с веб-сайта, а затем иметь доступ к загружаемому файлу столько времени, сколько потребуется.
Это вопрос из двух частей:
- Как я могу убедиться, что платные файлы не загружены неавторизованными людьми? И
- Как мне обращаться с аутентификацией для проверки, может ли пользователь загрузить платный файл?
По первому вопросу, я предполагаю, что я храню файлы в хешированном имени каталога, так что предположение будет почти невозможно? Будет ли сервер S3 хорошим решением здесь? Какие проблемы мне нужно знать в этом отношении?
Что касается второго вопроса, я предполагаю, что я могу создать в базе данных таблицу, в которой будут храниться покупки, которые связывают пользователя с файлом, например:
purchases table
-> id
-> hash (unique purchase identifier)
-> user (foreign key)
-> file (foreign key)
-> ...other stuff here like timestamp, etc...
... и затем с помощью приложения убедитесь, что пользователь совершил покупку, поэтому URL для загрузки будет:
http://www.example.com/something/download/sd9f7u23ihosd8087603/
... который затем будет искать запись с хешем sd9f7u23ihosd8087603
и убедиться, что она существует и связана с текущим пользователем. Затем оттуда направьте их в файл в файловой системе ...
Это хороший путь? Есть ли лучшее решение? Я уверен, что мне здесь не хватает деталей ...
Заявка написана на Django, если это имеет какое-либо отношение к проблеме. Еще одно замечание: на сайте будут доступны как бесплатные, так и платные загрузки.
Примечание: этот вопрос похож на тот, что я задаю: Наличие в Django загружаемых файлов