天天看點

[Nginx]用Nginx實作與應用結合的通路控制 - 防盜鍊

應用場景:圖檔等資源需要設定權限,如:隻有認證過的使用者才能通路自己的圖檔。

解決辦法:使用nginx的防盜鍊子產品http_secure_link可以實作,該子產品預設情況下不包含,故在安裝時要加上--with-http_secure_link_module

該子產品根據兩個參數控制權限通路,一個是過期時間(即該連結在這個時間之前可通路,過期後無法通路),該參數主要出于安全考慮。

另一個是通過md5算法算出來的key,一般通過uri計算

舉例:

上面的secure_link定義了控制權限的兩個參數(分别是st, e)

其中e就是上述的過期時間,建議e = 目前時間 + 有效期限(5分鐘)

例如:

e = date +%s -d "december 22, 2014 12:22:03"

   = 1419222123

st的計算公式如下:md5(pkey,uri,e),其中pkey是自定義的常量

st = php -r ‘print str_replace("=", "",strtr(base64_encode(md5("guahao@345/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg1419222123",true)),"+/","-_")) . "\n";‘

    =13c9kzrzt1qnngpg4vtksw

效果如下:

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg  --不可通路

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg?st=13c9kzrzt1qnngpg4vtksw&e=1419222123  --過期前可通路,過期後不可通路

http://192.168.1.22/img/headpic/13/13_140x140.jpg   --不在dossier下面的圖檔沒有通路限制

ok,到此為此我們基本實作的基于應用的權限控制,且方法靈活,因為e和st的生成由應用程式來控制,能進行任意的修改和變動,而架構不受影響。

繼續閱讀