文書化されていないsecure_link機能

バージョン0.8.50以降、Nginxのsecure_linkモジュールは、リンクを偽造から保護する点で大幅に改善されています。 奇妙なことに、新しい機能はまだ公式ドキュメントに反映されていません[ 1 ]。 英語の説明はNginxコミュニティのWebサイト[ 2 ]にあり、これらの変更に関するSysoyevの説明[ 3 ]にもあります。 安全なリンクを生成するためのPHPコードは、nginxフォーラムにあります[ 4 ]。

一般的に、イノベーションは次のようになります。



nginx.conf:

場所〜^ / p /(?<secure> [\ w-] +、\ d +)/(?<secured_stuff>。+)$ {
      secure_link $ secure; 
      #この例では、 '$ secure' = "HASH、TIMESTAMP"
      secure_link_md5 PASSWORD $ secure_link_expires $ secure_stuff;
      # '$ secure_link_expires'は、 'secure_link' = TIMESTAMPからの10進数値を含むnginx変数です

      if($ secure_link = ""){return 403;  }#無効なリンク
      if($ secure_link == 0){return 410;  }#有効期限切れのリンク
     
      #リンクは問題ありません、ここで何かをしてください
 }




URLは次のようになります。/ p / HASH、TIMESTAMP / ANYTHING

PASSWORDシークレットパスワード

TIMESTAMPは、UNIXエポックのリンクが有効になるまでの時間です

任意のテキスト

secure_link_md5テンプレートからのbase64-URL [ 5 ] md5ハッシュにエンコードされたHASH(この例では$ secured_stuff = ANYTHING)。 base64の後の文字「=」は省略可能



Nginxには、md5の量を計算する際にいくつかの暗黙のニュアンスがあります。

1. URLからカウントするための文字列($ secured_stuff)は、元の形式のURLエンコードからデコードされます

2. base64でエンコードする場合は、md5ハッシュをバイナリ形式で送信する必要があります



PHPのコードは次のようになります。

$time = time() + EXPIRE_TTL; # = TIMESTAMP $hash = md5(PASSWORD.$time.$secured_stuff, true); $hash = strtr( base64_encode($hash), array( '+' => '-', '/' => '_', '=' => '' )); $url = 'http://example.tld/p/$hash.','.$time.'/'.$secured_stuff;
      
      







引数とCookieを使用して、ハッシュと時間を渡すこともできます。

ビューURL用
  http://example.com/p/files/top_secret.pdf?st=PIrEk4JX5gJPTGmvqJG41g&e=1324527723 


stは、PASSWORD、URI、および引数eからのハッシュです

場所を見る

 
場所/ p / {
      secure_link $ arg_st、$ arg_e;  #これは、関連するURI部分と一致する必要があります 
      secure_link_md5 PASSWORD $ uri $ arg_e;  #PASSWORDは秘密トークンです
      ....
 }


推測するのは難しくありません。ハッシュを作成するときに、クライアントのIPアドレスを使用できます。



参照:

[1] sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html

[2] wiki.nginx.org/HttpSecureLinkModule

[3] nginx.org/pipermail/nginx/2010-September/022324.html

[4] forum.nginx.org/read.php?21、126363,128324#msg-128324

[5] en.wikipedia.org/wiki/Base64#URL_applications



All Articles