私はDjangoを使用して、アクセス制御を使用したファイルのダウンロードに関する調査を行ってきました。私の目標は、特定のユーザーがアクセスする場合を除いて、ファイルへのアクセスを完全にブロックすることです。Djangoを使用する場合、X-Sendfileはこれを実現するための最適な方法の1つであることを読みました(他のSOの質問などに基づく)。DjangoでX-Sendfileを使用することについての私の基本的な理解は次のとおりです。
- ユーザーがURIを要求して保護されたファイルを取得する
- Djangoアプリは、URLに基づいて返すファイルを決定し、ユーザーの権限などを確認します。
- Djangoアプリは、「X-Sendfile」ヘッダーがサーバーのファイルパスに設定されたHTTP応答を返します
- Webサーバーはファイルを見つけてリクエスターに返します(Webサーバーも途中で「X-Sendfile」ヘッダーを削除すると思います)
Djangoから直接ファイルをチャッキングする場合と比較して、X-Sendfileは保護されたダウンロードを実現するためのより効率的な方法のようです(Djangoと比較してNginxを使用してファイルを提供できるため)が、2つの質問があります。
- X-Sendfileの私の説明は少なくとも抽象的に正しいですか?
- ファイルが保存されているディレクトリへの通常のフロントエンドHTTPアクセス(例:http: //www.example.com/downloads/secret-file.jpg )を提供しないと仮定すると、それは本当に安全ですか(つまり、私の
public_html
ディレクトリに保存しないでください)?または、技術に精通したユーザーがヘッダーなどを調べて、ファイルにアクセスする方法(次に配布する方法)をリバースエンジニアリングすることはできますか? - それは本当にパフォーマンスの大きな違いですか。Djangoから直接150Mbファイルの8bチャンクダウンロードを提供することでアプリケーションサーバーをダウンさせるつもりですか、それともこの種の問題ではありませんか?私が尋ねる理由は、両方のバージョンがほぼ等しい場合、完了したダウンロードの数をログに記録したり、ダウンロードの帯域幅を集計したりするなど、Pythonで処理できるため、Djangoバージョンの方が望ましいからです。
前もって感謝します。