Мы работаем над веб-приложением, в котором (помимо других функций) наши пользователи могут загружать свои файлы. Однако мы не можем хранить эти файлы на нашем VPS, поскольку пространство для хранения ограничено, поэтому мы решили использовать S3.
Основная проблема заключается в том, что мы должны обеспечить пользователям доступ только к своим данным. Поэтому мы храним список файлов в нашей базе данных и список пользователей, имеющих к ним доступ. Наш сервер может легко решить, имеет ли пользователь доступ к файлу или нет. Но как на самом деле обслуживать файлы пользователям?
Я уже рассмотрел некоторые возможности, однако ни одна из них на самом деле не кажется лучшей.
1. Генерирование (истечение) подписанных URL с помощью PHP
Это действительно простой подход, он также быстрый, но приводит к очень и очень уродливым и длинным URL.
2. Запутанные URL
Это означает, что мы сохраняем файлы общественности для чтения на S3, но все файлы сохраняются в трудно угадать с именем папки , такие как: 24fa0b8ef0ebb6e99c64be8092d3ede20000
. Однако, возможно, это не самый безопасный путь. Даже если вы никогда не сможете угадать имя папки, после того, как вы узнаете ее (потому что у вас есть доступ к ней), вы можете поделиться этой ссылкой с кем угодно (с любым не уполномоченным лицом).
3. Скачать файлы через наш сервер
Это означает, что файлы не обслуживаются непосредственно S3, но сначала наш сервер читает их безопасно и обслуживает. Мы действительно не хотим этого :)
4. Проверка реферера
Решение обфусцированных URL-адресов можно улучшить, «убедившись», что запрос поступил с нашего сервера (вы можете настроить S3 для проверки реферера). Однако это было бы очень ненадежным решением, потому что не все браузеры отправляют данные реферера, и они также могут быть поддельными.
Что такое хороший способ безопасного обслуживания файлов из Amazon S3 для разных клиентов?