ホームページ  >  記事  >  バックエンド開発  >  PythonのFlaskフレームワークとNginxが静的ファイルアクセス制限機能を実装

PythonのFlaskフレームワークとNginxが静的ファイルアクセス制限機能を実装

WBOY
WBOYオリジナル
2016-07-06 13:29:451465ブラウズ

Nginx構成

Ngnix は高性能 Web サーバーであり、間違いなく現在の最重要人物です。優れたパフォーマンス、柔軟性と拡張性を備え、サーバー分野で都市を征服し、世界を征服しました。

静的ファイルは、ほとんどの Web サイトに不可欠な部分です。 Nginx を使用して静的ファイルを処理することも一般的な方法です。ただし、一部の静的ファイルは、いかなる状況でもユーザーに公開されません。たとえば、ユーザーがダウンロードできるように提供されている一部のファイル、ユーザーがアップロードしたユーザーのプライバシーに関わる一部の写真などです。ユーザーがログインしているときにアクセスできるようにする必要がありますが、ログインしていないユーザーには表示されないようにします。

大まかな処理では、バックエンド プログラムはページをレンダリングするときに、ビュー ロジックでユーザーのログインを確認し、対応するページに戻ります。たとえば、次のフラスココード (疑似コード)

リーリー

しかし、この種の処理には別の問題があります。静的ファイルは nginx によって処理され、ハッカーがファイルの絶対アドレスを見つけた場合、http://www.example.com/upload/user に直接アクセスすることも可能です。 /xxx.png。これらのファイルには、ユーザーがアップロードした証明写真など、ユーザーのプライバシーが含まれる場合があります。したがって、プログラマは、翌日、有名な Web サイト XXX に脆弱性があり、ハッカーがユーザーの ID カードやその他の情報を入手したとメディアに報道されることを望んでいません。

そのような制限を達成するには、Nginx ----XSendfile の小さな機能を使用できます。 原理も比較的単純で、おそらくリクエストのリダイレクトを使用します。

Nginx をサーバー フロントエンドのリバース プロキシとして使用する場合、リクエストが到着すると、nginx が最初にリクエストをキャッチし、ルールに従って処理するためにバックエンド プログラムに転送するか、直接転送することがわかっています。処理して返します。前者は一部の動的ロジックを処理しますが、後者は主に静的ファイルを処理します。したがって、上記の例では、静的ファイルの絶対アドレスに直接アクセスされた場合、Nginx は論理的な制限のためにバックエンドの user_idcard_page を呼び出すことなく、それを直接返します。

この問題を解決するために、nginx が提供する XSendfile 関数は単に内部ディレクティブを使用します。この命令は、内部リクエスト、つまりバックエンドによって転送されたリクエストのみが受け入れられることを示します。バックエンド ビュー ロジックでは、X-Accel-Redirect ヘッダー情報を明示的に記述する必要があります。

疑似コードは次のとおりです:

リーリー

このような処理の後、静的リソースをリダイレクトできます。この種の使用法は比較的一般的であり、多くのダウンロード サーバーはこの方法を使用して、ユーザーの権限に基づいてダウンロードを処理できます。

フラスコ

Flask は私のお気に入りの Web フレームワークです。Flask は上記のメソッドよりも簡単な sendfile メソッドも実装しています。 Vagrant を使用して仮想マシンを作成し、Flask を使用して上記の要件を実装しました。具体的なコードは次のとおりです。

プロジェクトの構造


リーリー
nginx 設定 nginx conf

web.conf

リーリー
フラスココード

app.py

リーリー
簡単な導入

リーリー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。