80
secure_linkディレクティブはカンマ区切りの2つのパラメータを取ります。最 初のパラメー
タはmd5ハッシュを持つ変数です。この例では、md5のHTTP引 数 を 使 用して います。
2番目のパラメータは 、リンクが 期限切 れになる時 間をUnixエポック時間形式で保持する
変 数 です。secure_link_md5ディレクティブ は md5ハッシュの生成に使用される文字列の
形式を宣言する1つのパラメータを取ります。他の構 成 同様に、ハッシュが検 証しない 場
合には、$secure_link変数は空の文字列に設定されます。しかし、この使用事例の場合、
ハッシュ が 一 致して、時 間 が 失 効して いる 場 合 $secure_link変数は0に設 定されます。
解説
リンクを保護するこの使用法は、レシピ 7.6に示されているsecure_link_secretよりも
柔軟性があり、見た目もすっきりしています。これらのディレクティブを使用すると、ハッ
シュ文字列でNGINXで使用できる変数を数にかかわらず使用できます。ハッシュ
文字列でユーザー固有の変数を使用すると、ユーザーはセキュリティで保護されたリ
ソースへのリンクを交換できないため、セキュリティが強化されます。$remote_addrま
たは$http_x_forwarded_forなどの変数、またはアプリケーションによって生成された
セッションcookieヘッダーを使用することが推奨されます。secure_linkの 引 数 は 、任 意
の変数から取得でき、最適な名前を付けることができます。条件:アクセスはあります
か?設 定された時間 内にアクセスしますか?アクセスがない場 合:禁止 。アクセスがあ
るものの、遅れた:失効。HTTP410「ページが削除されました」は失効したリンクに一
番適しています。この状態は永久だと認識されているためです。
7.9 有 効 期 限のあるリンクの生 成
問題
有 効 期 限 のあるリンクを生成 する必要があります。
解決法
Unixエポック形式で有効期限のタイムスタンプを生成します。Unixシ ス テ ム で は 、次 に
示される方法で日付を使用してテストできます:
$ date -d "2020-12-31 00:00" +%s --utc
1609372800
次に、secure_link_md5ディレクティブで構成された文字 列と一 致するように、ハッシュ
文字列を連結する必要があります。このケースでは使用される文字列は1293771600/
resources/index.html127.0.0.1 mySecretです。md5ハ ッ シ ュ は 、単 な る 16進ダイジェスト
と は 少 し 異 な り ま す 。こ れ は 、base64でエンコードされたバイナリ形式のmd5ハッシュで、
プ ラ ス 記 号( +)がハイフン(-)に 変 換 さ れ 、ス ラ ッ シ ュ( /)が ア ン ダ ー ス コ ア( _)に 変 換
さ れ 、等 号( =)が 削 除 さ れ て い ま す 。以 下 は 、Unixシステムで の 例 で す:
| 第7章:セキュリティコントロール