ngx_http_secure_link_module モジュール
ディレクティブ secure_link secure_link_md5 secure_link_secret 組み込み変数 |
ngx_http_secure_link_module
モジュール(0.7.18) は、リクエストされたリンクの真偽をチェックし、許可されていないアクセスからリソースを保護し、リンクの生存期間を制限します。
リクエストされたリンクの認証は、リクエスト時に渡されたchecksumの値と、リクエストから計算された値から渡されます。リンクが制限時間付きの生存期間で、その時間が終了すると、そのリンクは古いものと見なされます。これらのチェックのステータスは $secure_link
変数の中で利用できます。
モジュールは二つの二者択一の操作モードを提供します。一つ目のモードはsecure_link_secretディレクティブによって有効にされ、リクエストされたリンクの認証チェックに使われます。そして認証されていないアクセスからリソースを守ります。二つ目のモード(0.8.50)はsecure_link とsecure_link_md5ディレクティブによって有効にされます。そしてリンクの生存期間を制限するために使う事もできます。
このモジュールはデフォルトではビルドされず、--with-http_secure_link_module
configureパラメータと一緒に有効にされる必要があります。
ディレクティブ
構文: |
secure_link |
---|---|
デフォルト: | - |
コンテキスト: |
http , server , location |
チェックサムの値とリンクの生存期間がどこから抽出されるかを、変数付きの文字列で定義します。
expression
で使われる変数は通常リクエストに関係しています; 以下のexample をみてください。
文字から抽出されたchecksumの値は、secure_link_md5 ディレクティブで定義された表現のMD5ハッシュ値と比較されます。checksumが異なると、$secure_link
変数は空の文字列に設定されます。checksumが同じであれば、リンクの生存期間がチェックされます。リンクの生存期間に制限があり、その時間が経過した場合は、$secure_link
変数が"0
"に設定されます。そうでなければ、それは"1
"が設定されます。リクエストの中で渡されるMD5ハッシュ値はbase64urlで符号化されます。
リンクの生存期間に制限がある場合は、期限の時間はEpoch (Thu, 01 Jan 1970 00:00:00 GMT) からの秒数で設定されます。値はMD5ハッシュの後の表現で指定され、カンマで区切られています。リクエストの中で渡される生存期間はsecure_link_md5 ディレクティブの中で使われる$secure_link_expires
変数を使って利用可能です。生存期間が指定されていなければ、リンクの生存期間に制限はありません。
構文: |
secure_link_md5 |
---|---|
デフォルト: | - |
コンテキスト: |
http , server , location |
MD5ハッシュの値が計算されリクエストの中で渡される値と比較されるための、表現を定義します。
表現には、安全にされたリンク(リソース)の部分と秘密の要素が含まれていなければなりません。リンクの生存期間に制限がある場合は、表現は $secure_link_expires
も含む必要があります。
認証されていないアクセスを避けるために、表現にはアドレスやブラウザのバージョンのようなクライアントに関する情報を含むかも知れません。
例:
location /s/ { secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$uri$remote_addr secret"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } ... }
"/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647
"リンクは、"/s/link
"へのアクセスをクライアントIPアドレスが127.0.0.1のものに制限します。リンクの生存期間もuntil January 19, 2038 (GMT)に制限されます。
UNIXでは、md5
リクエスト引数の値は次のように取得することができます:
echo -n '2147483647/s/link127.0.0.1 secret' | \ openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
構文: |
secure_link_secret |
---|---|
デフォルト: | - |
コンテキスト: |
場所 |
リクエストされたリンクの認証チェックに使われる秘密のword
を定義します。
リクエストされたリンクの完全なURIは次のようになります:
/prefix
/hash
/link
hash
はリンクと秘密のワードの連結のために計算されたMD5ハッシュの16進数表現で、prefix
はスラッシュが無い任意の文字列です。
リクエストされたリンクが認証チェックを通ると、$secure_link
変数がリクエストURIから抽出されたリンクへ設定されます。そうでなければ、$secure_link
変数は空の文字列に設定されます。
例:
location /p/ { secure_link_secret secret; if ($secure_link = "") { return 403; } rewrite ^ /secure/$secure_link; } location /secure/ { internal; }
"/p/5e814704a28d9bc1914ff19fa0c4a00a/link
"のリクエストは内部的に"/secure/link
"にリダイレクトされるでしょう。
UNIXでは、この例のハッシュ値は次のように取得することができます:
echo -n 'linksecret' | openssl md5 -hex
埋め込み変数
$secure_link
- リンクのチェックのステータス選択されたオペレーションモードに依存する具体的な値
$secure_link_expires
- リクエストの中で渡されたリンクの生存期間; secure_link_md5 ディレクティブの中だけで使われることを意図しています。