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_linksecure_link_md5ディレクティブによって有効にされます。そしてリンクの生存期間を制限するために使う事もできます。

このモジュールはデフォルトではビルドされず、--with-http_secure_link_module configureパラメータと一緒に有効にされる必要があります。

ディレクティブ

構文: secure_link expression;
デフォルト: -
コンテキスト: 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 expression;
デフォルト: -
コンテキスト: 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;
デフォルト: -
コンテキスト: 場所

リクエストされたリンクの認証チェックに使われる秘密の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_md5 ディレクティブの中だけで使われることを意図しています。

TOP
inserted by FC2 system