2014-08-27 84 views
1

我試圖創建Nginx的有限時間的鏈接...Nginx的TTL SecurLink不工作

我有一個PHP腳本,將時間和SECRETCODE一個md5hash的URL,然後nginx的應該是閱讀和比較該時間看看鏈接是否應該活着或者沒有...因爲它是不工作的......它會返回所有具有$ st和$ arg_e的403所有內容我有一個服務器人,所以nginx的東西是不是我的(他說),即時通訊不是最好的...所以我需要你的幫助,如果你可以...

這是PHP腳本,我運行所有的流量通過追加祕密碼和超時參數...這基本上是一個腳本來添加令牌「& ST =」和「& E =」的URL

<?php 

$params = $_SERVER['QUERY_STRING']; 


define(URL_TIMEOUT, 120); # 2min timeout 
$secret = "xxxmysecretxxx"; 
$time = pack('N', time() + URL_TIMEOUT); 
$timeout = bin2hex($time); 

$hashmac = md5($secret.$time); 

$url = "http://mytracker.net"."/".$params."&st=".$hashmac."&e=".$timeout; 

header('location: '.$url); 
//echo $url; 
?> 

這裏是Nginx的配置與規格爲/保護文件夾

location /protected { 
    secure_link_md5 xxxmysecretxxx$arg_e; 
    secure_link $arg_st,$arg_e; 

    if ($secure_link = "") { 
     return 403; 
    } 

    if ($secure_link = "0") { 
     return 403; 
    } 
    location ~ \.php$ { 
     secure_link_md5 xxxmysecretxxx$arg_e; 
     secure_link $arg_st,$arg_e; 

     if ($secure_link = "") { 
      return 403; 
     } 

     if ($secure_link = "0") { 
      return 403; 
     } 
     #try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 
} 

想知道我做錯了什麼會有所幫助嗎?

的期望是,服務器會檢查時間戳對當前時間,如果從哈希創建那麼時間過去2分鐘顯示403,如果不顯示頁面...

請幫腔...

回答

1

Nginx使用「特殊」md5校驗和。 「Special」like「binary,base64encoded and some some characters replace」。

你可以看到,在命令行中例如在nginx manual

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

可以實現與PHP類似的東西,如:

$md5 = md5($your_secure_parameters); 
$nginx_md5 = base64_encode(hex2bin($md5)); 
$nginx_md5 = str_replace(array('+', '/', '='), array('-', '_', ''), $nginx_md5); 

而且我認爲對的bin2hexpack電話時間戳太多了。

+0

甜,我認爲工作!我現在看到的頁面,它似乎鏈接是活着的2分鐘...你不會知道額外的時間,這將增加一個重定向,你會嗎?另外,你會改變關於nginx配置的任何東西嗎?將不勝感激。 – user3707960 2014-08-27 14:50:50

+0

對不起,我不明白第一個問題。 nginx配置包含兩次相同的部分。還應該在'secure_link_md5'內使用'$ secure_link_expires'作爲時間戳,而不是'secure_link'中指定的變量。也許你還應該把'$ uri'加入校驗和中,以加強安全性。 – GhostGambler 2014-08-27 18:30:04

+0

我的第一個問題是什麼意思,你認爲多少開銷時間被納入md5hash? IE瀏覽器。你認爲這個過程增加了多少毫秒才能進入頁面? – user3707960 2014-08-28 05:09:28