Реализация Rails для защиты документов S3

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

www.myapp.com/attachment/5, который должен аутентифицировать пользователя перед отображением / загрузкой документ.

Я читал аналогичные вопросы о stackoverflow, но не уверен, что видел какие-либо хорошие выводы.

Из того, что я прочитал, есть несколько вещей, которые вы можете сделать, чтобы «защитить» свои документы S3.

1) Скрыть URL-адрес. Я сделал это. Я думаю, что это хорошо, чтобы никто не мог угадать URL. Например, было бы легко «пройтись» по URL, если ваши URL S3 очевидны: https://s3.amazonaws.com/myapp.com/attachments/1/document.doc . Имея URL-адрес, например: https://s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc кажется намного лучше. Это замечательно, но не решает проблему передачи URL-адресов по электронной почте или на веб-сайтах.

2) Используйте истекающий URL-адрес, как показано здесь: Rails 3, paperclip + S3 - Howto Store для экземпляра и Защитить доступ Для меня, однако, это не лучшее решение, потому что URL-адрес отображается (даже на короткий период времени), и другой пользователь, возможно, со временем сможет быстро повторно использовать URL-адрес. Вы должны настроить время, чтобы разрешить загрузку, не выделяя слишком много времени на копирование. Это просто кажется неправильным решением.

3) Прокси-загрузка документа через приложение. Сначала я попытался просто использовать send_file: http://www.therailsway.com/2009/2/22/file-downloads-done-right , но проблема в том, что эти файлы могут быть только статическими / локальные файлы на вашем сервере и не обслуживаются через другой сайт (S3 / AWS). Однако я могу использовать send_data, загрузить документ в свое приложение и сразу же передать его пользователю. Проблема с этим решением очевидна - в два раза больше пропускной способности и в два раза больше времени (для загрузки документа в мое приложение, а затем обратно пользователю).

Я ищу решение, которое обеспечивает полную безопасность # 3, но не требует дополнительной полосы пропускания и времени для загрузки. Похоже, Basecamp «защищает» документы за своим приложением (через аутентификацию), и я предполагаю, что другие сайты делают что-то подобное, но я не думаю, что они используют мое решение №3.

Мы будем очень благодарны за предложения.

ОБНОВЛЕНИЕ :

Я выбрал четвертое решение:

4) Используйте политики корзины Amazon для управления доступом к файлам на основе реферера: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html

ОБНОВЛЕНИЕ СНОВА:

Скважину №4 можно легко обойти с помощью инструмента разработчика браузеров. Так что я все еще ищу твердое решение.

11
задан Community 23 May 2017 в 11:53
поделиться