序文 多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが知っています。無料で入手できることは非常にまれです。では、これらの Web サイトはどのようにしてリソースのホットリンクを防止しているのでしょうか。 ここでは比較的使いやすいツールをお勧めします。Nginx 自体が secure_link を提供してアンチホットリンク機能を完成させており、これによりサーバーファイルリンクにタイムスタンプと検証コードを追加して、サーバーファイルが勝手にダウンロードされて盗まれるのを防ぐことができます。 タイミング図 Nginx の設定 ここでは、Nginx のインストール方法については詳しく説明しません。インストール中に ngx_http_secure_link_module を有効にすることを忘れないでください。 ./configure --with-http_secure_link_module #nginx をコンパイルするときに追加 インストール完了検出: nginx -V 次のように表示されたら、構成は成功です。
インスタンス構成 サーバー{ 聞く 80; サーバー名 download.52itstyle.com; 文字セット utf-8; 位置 / { #ここでは2つのパラメータが設定されています。1つはmd5、もう1つはexpiresです。 secure_link $arg_md5、$arg_expires; #md5 のハッシュ形式は secret+url+expires です。expires はタイムスタンプの単位 s、url はリクエスト アドレス secure_link_md5 52itstyle$uri$arg_e; #ここでの md5 は secure_link_md5 メソッドを使用して計算したハッシュです。 secure_link は計算したハッシュ値を比較して、md5 パラメータと一致するかどうかを確認します if ($secure_link = "") { #リソースが存在しないかハッシュ比較に失敗した場合は、402 を返します。 } $secure_link = "0"の場合{ #タイムアウトに失敗し、405 を返します。 } #ファイル名を変更します。add_header Content-Disposition "attachment;filename=$arg_f"; エイリアス /data/site/down.52itstyle.com/; } エラーページ 500 502 503 504 /50x.html; エラーページ 402 405 /40x.html; 場所 = /50x.html { ルートhtml; } 場所 = /40x.html { ルートhtml; } } パラメータ セキュアリンク 構文: secure_link 式; デフォルト値: なし 構成セクション: http、サーバー、場所 式はチェックサムと有効期限で構成されます。チェックサムは secure_link_md5 で指定されたパラメータの MD5 ハッシュ値と比較されます。 2 つの値が矛盾する場合、$secure_link 変数の値は空になります。2 つの値が一致する場合は、有効期限チェックが実行されます。有効期限が切れている場合は、$secure_link 変数の値は 0 になります。有効期限が切れていない場合は、1 になります。 リンクが時間に敏感な場合、有効期限は、MD5 ハッシュ値の後にコンマで区切られたタイムスタンプを使用して設定されます。有効期限が設定されていない場合、リンクは永久に有効になります。 セキュアリンクmd5 構文: secure_link_md5 式; デフォルト値: なし 構成セクション: http、サーバー、場所 式は、URL で渡された md5 値と比較および検証される md5 ハッシュ値を計算するためのパラメータを指定します。式には通常、URI (例: demo.com/s/link の URI は /s/link) と暗号化キー シークレットが含まれます。リンクに時間制限がある場合は、式に $secure_link_expires を含める必要があります。式には、アクセス IP、ブラウザのバージョン情報などのクライアント情報も含めることができます。 Javaバックエンド構成 ケース(参考のみ): org.apache.commons.codec.binary.Base64 をインポートします。 org.apache.commons.codec.digest.DigestUtils をインポートします。 /** * 暗号化された接続を生成する */ パブリッククラスSecureLink { プライベート静的文字列サイト = "https://down.52itstyle.com/"; プライベート静的文字列シークレット = "52itstyle"; パブリック静的文字列createLink(文字列パス、文字列ファイル名){ String time = String.valueOf((System.currentTimeMillis() / 1000) + 300); // 5分間有効 String md5 = Base64.encodeBase64URLSafeString(DigestUtils.md5(secret + path + time)); 文字列 url = サイト + パス + "?md5=" + md5 + "&expires=" + 時間 + "&f="+fileName; URLを返します。 } パブリック静的voidメイン(String[] args) { //https://down.52itstyle.com/2018101025689452.pdf?md5=FnDYyFzCooI9q8sh1Ffkxg&expires=1539847995&f=分散 seckill アーキテクチャ.pdf System.out.println(createLink("2018101025689452.pdf","分散 seckill アーキテクチャ.pdf")); } } 要約する 暗号化プロセス全体は対称暗号化に少し似ています。バックエンドはキーに基づいて暗号化されたアドレスを生成し、Nginx プロキシ サーバーは復号化検証を実行します。検証に合格すると、ダウンロードが許可されます。 テスト中に別の問題が見つかりました。生成されたリンクがタイムアウトすることがあります。これは、バックエンド サーバーとダウンロード サーバー間の時間の不一致が原因である可能性があります。システム時間を同期できます。 ポイントダウンロードサービスを提供している友人がいる場合、これは確かに良い選択です。注意する必要があるのは、漏洩を防ぐためにキーを定期的に変更する必要があることです。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例
現在の時刻を取得します: current_timestamp を選択します。出力: 2016-06-...
Linux は現在最も広く使用されているサーバー オペレーティング システムです。Unix をベー...
Nginx は C 言語で開発されており、Linux で実行することをお勧めします。もちろん、Win...
先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...
序文MySQL 5.7.11 以降、MySQL は、別の表領域に格納された InnoDB テーブルの...
背景モバイル デバイスでは、ページ ジャンプ間のキャッシュが必須要件です。例: ホームページ =&g...
IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...
画像をプルする root@EricZhou-MateBookProX: docker pull je...
span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...
この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...
目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...
目次1. プロトタイプとは何ですか? 2. プロトタイプ__プロト__ 4. コンストラクター5. ...
目次序文ローリング原理成し遂げるソースコード参照する序文モバイル Web ページの日常的な開発では、...
目次1 ユーザー変数の概要2 ユーザー変数の定義3 ユーザー変数の使用3.1 セットを通した例3.2...
目次導入説明書実際の経験長所と短所総括する導入mysqlpump は mysqldump の派生です...