Nginx TTL SecurLink不工作

时间:2014-08-27 12:40:06

标签: php nginx ttl

我正在尝试在Nginx上创建Time Limited链接...

我有一个PHP脚本,它将一个md5hash的时间和密码添加到URL,然后nginx应该读取并比较时间,看看链接是否应该存活......实际上,它不起作用...对于包含$ st和$ arg_e

的所有内容,它返回403

我有一个服务器人,所以nginx的东西不是我的(他把它)并且我不是最好的....所以我需要你的帮助,如果你可以......

这是PHP脚本,我运行所有流量来附加密码和超时参数......这基本上只是一个脚本添加标记“& st =”和“& e =”到网址

<?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;
?>

这是带有/ protected文件夹

规范的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 个答案:

答案 0 :(得分:1)

Nginx使用“特殊”md5校验和。 “特殊”喜欢“二进制文件,base64编码并且替换了一些字符”。

您可以在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调用过多。