ngx_http_secure_link_module 模組

指令
     secure_link
     secure_link_md5
     secure_link_secret
嵌入式變數

ngx_http_secure_link_module 模組 (0.7.18) 用於檢查請求連結的真實性、保護資源免受未經授權的存取,並限制連結的生命週期。

請求連結的真實性是透過比較請求中傳遞的校驗和值與針對該請求計算的值來驗證的。如果連結具有有限的生命週期且時間已過期,則該連結將被視為過時。這些檢查的狀態可在 $secure_link 變數中取得。

此模組提供兩種替代操作模式。第一種模式由 secure_link_secret 指令啟用,用於檢查請求連結的真實性,並保護資源免受未經授權的存取。第二種模式 (0.8.50) 由 secure_linksecure_link_md5 指令啟用,也用於限制連結的生命週期。

預設情況下,此模組不會建置,應使用 --with-http_secure_link_module 組態參數啟用。

指令

語法 secure_link expression;
預設
Context http, server, location

定義一個包含變數的字串,將從該字串中提取連結的校驗和值和生命週期。

expression 中使用的變數通常與請求相關聯;請參閱下面的 範例

從字串中提取的校驗和值與 secure_link_md5 指令定義的表達式的 MD5 雜湊值進行比較。如果校驗和不同,則 $secure_link 變數設定為空字串。如果校驗和相同,則檢查連結的生命週期。如果連結具有有限的生命週期且時間已過期,則 $secure_link 變數設定為「0」。否則,它會設定為「1」。請求中傳遞的 MD5 雜湊值以 base64url 編碼。

如果連結具有有限的生命週期,則到期時間設定為自 Unix Epoch (1970 年 1 月 1 日星期四 00:00:00 GMT) 以來的秒數。該值在 MD5 雜湊後於表達式中指定,並以逗號分隔。請求中傳遞的到期時間可透過 $secure_link_expires 變數使用,以在 secure_link_md5 指令中使用。如果未指定到期時間,則連結具有無限的生命週期。

語法 secure_link_md5 expression;
預設
Context 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」連結限制 IP 位址為 127.0.0.1 的用戶端對「/s/link」的存取權限。該連結的生命週期也有限,直到 2038 年 1 月 19 日 (GMT)。

在 UNIX 上,md5 請求引數值可以透過以下方式取得

echo -n '2147483647/s/link127.0.0.1 secret' | \
    openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

語法 secure_link_secret word;
預設
Context location

定義一個用於檢查請求連結真實性的秘密 word

請求連結的完整 URI 如下所示

/prefix/hash/link

其中 hash 是針對連結和秘密字詞的串連計算的 MD5 雜湊的十六進制表示形式,而 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 指令。