Разрешения политики корзины Amazon S3 не позволяют API Dropbox извлекать файлы из корзины

Это сводило меня с ума всю ночь.

Я написал приложение DropBox на PHP/MYSQL, которое отлично работало, оно извлекало файлы из ведра Amazon S3 и отправляло их в папки Dropbox пользователей.

Затем я изменил политику корзины в корзине Amazon S3, чтобы разрешить извлечение файлов только из нескольких рефереров и подписанных URL-адресов (пример: /musicfile.mp3?AWSAccessKeyId=[accesskeyid]&Expires=[expires]&Signature=[signature] ).

Это прекрасно работает для всех целей, за исключением того, что я узнал, что моя функциональность Dropbox больше не работает, потому что вы передаете API Dropbox URL-адрес mp3 на Amazon S3, а на стороне Dropbox они извлекают файл, так что теперь у меня есть ведро политика, разрешающая только определенные рефереры, dropbox получает отказ в разрешении, и API сообщает мне, что это не удалось.

Поэтому я подумал, что это легко исправить, я просто добавлю ?AWSAccessKeyId= бла-бла в конец файла, передаваемого в Dropbox, и все будет работать мгновенно, но это не так, потому что тогда файл не заканчивается расширением Dropbox распознает, поэтому он снова не работает.

Затем я подумал, что просто добавлю реферер из Dropbox в свою политику ведра, но я до сих пор понятия не имею, что это такое, и добавил все варианты dropbox.com и api.dropbox с https и без него, и все безуспешно.

Если у кого-то есть идея или решение, вы серьезно сделаете мою неделю.

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


person Island    schedule 28.08.2013    source источник


Ответы (2)


Я предполагаю, что поскольку вы упомянули о передаче URL-адреса в Dropbox, вы используете заставку. ? Если это так, вы можете указать Saver, какое имя файла использовать, поэтому дайте ему авторизованный URL-адрес и укажите имя файла, чтобы было расширение файла. Например.:

<a href="https://...?AWSAccessKeyId=..." class="dropbox-saver" data-filename="myfile.txt"></a>

или, в JavaScript:

Dropbox.save('https://...?AWSACcessKeyId=...', 'myfile.txt');

Когда вы говорите, что «потому что файл не заканчивается расширением, которое распознает Dropbox, поэтому он снова не работает», что именно вы имеете в виду? Что происходит, когда файл не имеет расширения?

person user94559    schedule 28.08.2013

Когда ничего не помогает... проверьте журналы.

Включите ведение журнала для своего сегмента, запустите несколько тестов, подождите несколько минут, чтобы появился журнал, а затем просмотрите журналы, чтобы узнать, что такое реферер. Кажется безопасной ставкой, что реферера не будет, потому что пользовательский агент, который не является веб-браузером (например, внутренние процессы Dropbox), обычно не имеет причины отправлять реферера.

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

  • честные люди
  • ленивые люди

http://en.wikipedia.org/wiki/Referer_spoofing

person Michael - sqlbot    schedule 30.08.2013