0

这让我整晚都在发疯。

我用 PHP/MYSQL 编写了一个运行良好的 DropBox 应用程序,它从 Amazon S3 存储桶中提取文件并将它们发送到用户的 Dropbox 文件夹。

然后我更改了 Amazon S3 存储桶上的存储桶策略,以允许仅从少数引荐来源和签名 URL 中提取文件(例如:/musicfile.mp3?AWSAccessKeyId=[accesskeyid]&Expires=[expires]&Signature=[signature] )。

这适用于所有目的,除了我了解到我的 Dropbox 功能不再有效,这是因为您将 Amazon S3 上 mp3 的 URL 传递给 Dropbox API,并且在 Dropbox 方面他们将文件拉入,所以现在我有了存储桶政策只允许某些推荐人,保管箱获得拒绝的权限,API 告诉我它失败了。

所以我认为很容易解决,我只需将 ?AWSAccessKeyId= blah blah 添加到传递给保管箱的文件的末尾,所有这些都会立即工作,但是,这不是因为文件不会以扩展名 Dropbox 结尾认识到所以它再次无法工作。

然后我想我只需将来自 Dropbox 的推荐人添加到我的存储桶策略中,但我仍然不知道它是什么,并且添加了带有和不带有 https 的 dropbox.com 和 api.dropbox 的所有变体,所有这些都没有运气。

如果有人有任何想法或解决方案,你会认真地度过我的一周。

我最不想做的事情是被迫先将文件下载到我的服务器,然后发送到保管箱,我真的不想这样做,我知道我已经把它按原样完美地工作了,而且它有效当我完全删除我的存储桶策略时,我只想让它与它一起工作。

4

2 回答 2

1

我假设,因为您提到将 URL 传递给 Dropbox,您正在使用Saver?如果是这样,你可以告诉 Saver 使用什么文件名,所以给它授权的 URL 并指定一个文件名,这样就有一个文件扩展名。例如:

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

或者,在 JavaScript 中:

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

当你说“因为文件没有以 Dropbox 识别的扩展名结尾,所以它再次无法工作”时,你到底是什么意思?当文件没有扩展名时会出现什么问题?

于 2013-08-28T16:27:07.470 回答
0

当所有其他方法都失败时...检查日志。

打开存储桶的日志记录,运行一些测试,等待几分钟以显示日志,然后检查日志以查看引用者是什么。似乎没有推荐人是一个安全的赌注,因为不是 Web 浏览器的用户代理(例如 Dropbox 的后端进程)通常没有理由发送推荐人。

如果有什么安慰的话,通过限制引用来“保护”存储桶就像根本不保护存储桶一样。打败它非常简单,因此它只能真正有效地保护两类人:

  • 诚实的人
  • 懒惰的人

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

于 2013-08-30T03:37:09.017 回答