ngx_http_secure_link_module

ngx_http_secure_link_module 모듈(0.7.18)은 요청된 링크의 신뢰성을 확인하고 인증되지 않은 액세스로부터 리소스를 보호하고 링크 수명을 제한합니다.

요청된 링크의 신뢰성은 요청에 전달된 체크섬 값과 요청에 대해 계산된 값을 비교하여 확인할 수 있습니다. 링크의 수명이 제한되고 시간이 만료된 경우 링크는 오래된 것으로 간주됩니다. 이러한 검사의 상태는 $secure_link 변수에서 사용할 수 있도록 설정됩니다.

모듈은 2개의 대체 작동 모드를 제공합니다. 첫 번째 모드는 secure_link_secret 명령에 의해 활성화되고 요청된 링크의 신뢰성을 확인하고 승인되지 않은 액세스로부터 리소스를 보호하는 데 사용됩니다. 두 번째 모드(0.8.50)는 secure_link 및 secure_link_md5 명령에 의해 활성화되고 링크의 수명을 제한하는 데에도 사용됩니다.

이 모듈은 기본적으로 빌드되지 않고 –with-http_secure_link_module 구성 매개변수로 활성화해야 합니다.

Directives

Syntax:  secure_link expression;
Default: —
Context: http, server, location

체크섬 값 및 링크의 수명이 추출되는 변수로 문자열을 정의합니다.

표현식에 사용된 변수는 일반적으로 요청과 연결됩니다. 아래의 예제를 참조하세요.

문자열에서 추출된 체크섬 값은 secure_link_md5 명령으로 정의된 표현식의 MD5 해시 값과 비교됩니다. 체크섬이 다르면 $secure_link 변수는 비어 있는 문자열로 설정됩니다. 체크섬이 동일하면 링크 수명이 확인됩니다. 링크의 수명이 제한되고 시간이 만료된 경우 $secure_link 변수는 “0”으로 설정됩니다. 그렇지 않으면 “1”로 설정됩니다. 요청의 전달된 MD5 해시 값은 base64url에서 인코딩됩니다.

링크의 수명이 제한되는 경우 만료 시간은 Epoch 이후 초 단위로 설정됩니다(Thu, 01 Jan 1970 00:00:00 GMT). 값은 표현식에서 MD5 해시 다음에 값이 지정되고 쉼표로 구분됩니다. 요청의 전달된 만료 시간은 secure_link_md5 명령에서 사용하기 위해 $secure_link_expires 변수를 통해 사용할 수 있습니다. 만료 시간이 지정되지 않으면 링크 수명이 무제한입니다.

Syntax:  secure_link_md5 expression;
Default: —
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 =
Syntax:  secure_link_secret word;
Default: —
Context: location

요청된 링크의 신뢰성을 확인하는 데 사용되는 비밀 단어를 정의합니다.

요청된 링크의 전체 URI는 다음과 같습니다.

/prefix/hash/link

여기에서 해시는 링크 및 비밀 단어의 조합에 대해 계산되는 MD5 해시의 16진수 표현이며 접두사는 슬래시 없는 임의의 문자열입니다.

요청된 링크가 신뢰성 검사를 전달하면 $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 명령에서만 사용해야 합니다.