HttpSecureLinkModuleJa

インストール | モジュール |  アドオン |  設定 |  コミュニティ |  その他の情報源 = 概要 =

このモジュールは、リクエストされた URL がセキュリティトークンを必要とするかどうかをチェックします. このモジュールはデフォルトではコンパイルされません. コンパイルする際は、nginx をコンパイルする際に

--with-http_secure_link_module

を引数として指定して configure する必要があります. このモジュールは nginx 0.7.18 以降でのみサポートされます.

利用例
想定外のところからリンクされたくない PDF ファイルを想像してみてください. これを実現するためには、ファイルにユニークなトークンと有効期限を追加する必要があります. ここではトークンと有効期限を生成するために、次のような PHP コードを用いました. ハッシュを生成するために、PHP を次のようにして実行します. $secret = 'segredo'; // ハッシュの再生成をより困難にします $path  = '/p/files/top_secret.pdf'; // ユーザに送信するファイル $expire = 1096891200; // ファイルの有効期限が到来する時刻. 通常は time + x 値を使用する

$md5 = base64_encode(md5($secret. $path. $expire, true)); // バイナリ形式のハッシュを利用する $md5 = strtr($md5, '+/', '-_'); // + および / は URL において特殊文字として認識される. 詳細は「参照」節でリンクした Wikipedia のページを参照のこと $md5 = str_replace('=', '', $md5); // When used in query parameters the base64 padding character is considered special.

The expire time can obtained by using the time function in PHP &mdash; or similar in other programming language &mdash; in order to obtain the Unix epoch.

これで、簡単には再生成できないハッシュと有効期限を入手しました. これをリンク対象のファイルに対して指定するには、次のようにします:

http://example.com/p/files/top_secret.pdf?st=PIrEk4JX5gJPTGmvqJG41g&e=1324527723

Nginx にこの URL を保護させるには、MD5 ハッシュを再生成させる方法を伝達する必要があります. これを次のようにして行います:

location /p/ { ## This must match the URI part related to the MD5 hash and expiration time. secure_link $arg_st,$arg_e;

## MD5ハッシュをシークレットトークン、URI (PHP の $path)、有効期限から生成する secure_link_md5 segredo$uri$arg_e;

## ハッシュが不正な場合、$secure_link は~文字列となる if ($secure_link = "") { return 403; }

## 現在のローカル時刻が指定された有効期限よりも大きい if ($secure_link = "0") { return 403; }   ## If everything is ok $secure_link is 1. }

=  ディレクティブ =

secure_link
This directive specifies the MD5 hash value and the expiration time of this link URI. The md5_hash must be encoded using Base64 for URLs. expiration_time is the Unix epoch.

If no expiration_time is specified then the link never expires.

secure_link_md5
このディレクティブは MD5 のハッシュ対象となる文字列を指定します. 文字列は上記の例のように変数を用いても構いません. ハッシュ値は secure_link ディレクティブで指定された md5_hash と比較されます. 両者が合致する場合、$secure_link は 1 となり、それ以外の場合は空文字列となります.

secure_link_secret


このディレクティブは、nginx 0.8.50 で secure_link_md5 により廃止予定となりました.

= 変数 =

$secure_link
この変数は、 secure_link_secret が用いられているかどうかで、異なる挙動を示します:
 * secure_link_secret が用いられており、リクエストされた URI が計算された MD5 ハッシュに適合する場合、$secure_link は保護された URI となります. それ以外の場合は空文字列となります.
 * secure_link および secure_link_md5 が用いられており、リクエストされた URI が計算された MD5 ハッシュに適合する場合、$secure_link は 1 となります. 現在のローカル時刻が $expiration_time を超えた場合、$secure_link の値は 0 となります. それ以外の場合は空文字列となります.

$secure_link_expires
$expiration_time が指定された場合は、その値が設定されます.

= 参照 =
 * オリジナルドキュメント
 * Base64 for URLs