アプリケーションのファイル ストレージ サーバーとして Rackspace Cloud Files を使用しています。ユーザーがアップロードするファイルは、アプリケーション内から承認される必要があり、コントローラーから正しい Rackspace Cloud Files CDN URL にリダイレクトされます。Rackspace Cloud Files の Referrer ACL を使用して認証を行おうとしています。
ですから、私が達成しようとしていることを明確にするために、非常に単純なスニペットを追加させてください。
class FilesController < ApplicationController
def download
redirect_to(some_url_to_a_file_on_cloud_files_url)
end
end
このダウンロード アクションにアクセスするためにユーザーがアクセスする URL は次のようになります。
http://a-subdomain.domain.com/projects/:project_id/files/:file_id/download
そのため、CloudFiles gem を使用して、動作するはずの ACL リファラーの正規表現をセットアップしました。
http\:\/\/.+\.domain\.com\/projects\/\d+\/files\/\d+\/download
ユーザーが Web UI のリンクをクリックすると、リンクが上記の URL にルーティングされ、パラメーターに応じて、ダウンロード アクションからユーザーが正しい Rackspace Cloud Files ファイル URL にリダイレクトされます。
さて、私が得たのは、私が無許可であるというエラーです (間違った http リファラー)。ダウンロードアクションから直接クラウドファイルにリダイレクトしているため、HTTPリファラーとして「カウント」されず、このURLをリファラーとして使用するのではなく、これを使用している可能性があると思いますURL:
http\:\/\/.+\.domain\.com\/projects\/\d+\/files
これは、「ダウンロード」リンクをクリックするときに表示されるページであるため、ユーザーは FilesController のダウンロード アクションに誘導されます。
Rackspace ACL の HTTP リファラーを次のように設定すると、次のようになります。
http\:\/\/.+\.domain\.com\/projects\/\d+\/files
そして、リンクをクリックしてください。ダウンロードする権限があります。しかし、これは十分に安全ではありません。なぜなら、誰でも、たとえば、html にバグを発見し、ファイルへの生のリンクを挿入してアクセスできるからです。
だから私の質問は、私が達成しようとしていることがうまくいかない方法や理由を知っている人はいますか?何か提案/アイデアはありますか? 私が言ったように、ユーザーがリンクをクリックすると、ユーザーがクラウドファイル上の実際のファイルにリダイレクトされているURLではなく、ファイルがクリックされている場所にリファラーが設定されている可能性があると思います.
このようなことは可能ですか?
class FilesController < ApplicationController
def download
# Dynamically set a HTTP Referrer here before
# redirecting the user to the actual file on cloud files
# so the user is authorized to download the file?
redirect_to(some_url_to_a_file_on_cloud_files_url)
end
end
どんな助け、提案も大歓迎です!
ありがとう!