Django は X-Sendfile (または X-Accel-Redirect) を使用してダウンロード可能なファイルを安全に提供するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-20 13:52:14
オリジナル
884 人が閲覧しました

How Can Django Securely Serve Downloadable Files Using X-Sendfile (or X-Accel-Redirect)?

Django でダウンロード可能なファイルを提供する

Web サイト上のユーザーは多くの場合、ファイルをダウンロードする機能を必要としますが、ファイルを保護し、直接ダウンロードを防止することは重要です。重要な。解決策の 1 つは、ユーザーが直接アクセスできないようにファイル パスを不明瞭にすることです。

これを実現するには、次のようなパラメータを含む URL を作成します。

http://example.com/download/?f=somefile.txt
ログイン後にコピー

ダウンロード可能なファイルがあるとします。 /home/user/files/ フォルダーにあります。 Django は、特定の URL やファイルを表示するための View を必要とせずに、ダウンロード用のファイルを提供するように構成できます。

X-Sendfile モジュールは、最適なソリューションを提供します。これにより、Django がファイルを見つけてヘッダーを指定できるようになりますが、実際のファイルの提供は Web サーバー (Apache、Lighttpd など) によって処理されます。 mod_xsendfile をインストールして構成した後、ビューと統合します。

from django.utils.encoding import smart_str

response = HttpResponse(content_type='application/force-download') 
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
return response
ログイン後にコピー

このアプローチには、サーバー制御または mod_xsendfile をサポートするホスティング会社が必要であることに注意してください。

追加考慮事項:

  • nginx サーバーの場合は、X-Sendfile の代わりに X-Accel-Redirect を使用します。
  • Django の場合1.7 以降では、代わりに content_type を使用してください。 mimetype.
  • パフォーマンスを向上させるために、「Content-Length」ヘッダーを設定することをお勧めします。

以上がDjango は X-Sendfile (または X-Accel-Redirect) を使用してダウンロード可能なファイルを安全に提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート