2014-08-27 80 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