首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nginx安全下载模块无法工作

nginx安全下载模块无法工作
EN

Stack Overflow用户
提问于 2016-06-21 16:31:18
回答 1查看 916关注 0票数 1

我试图实现这个模块以保护文件下载不受热链接的影响,并限制带宽的窃取:模块

我得到了403个错误。我认为这个错误在PHP代码中的某个地方。

/etc/nginx/con.d/default.conf

代码语言:javascript
复制
location /downloads/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

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

    if ($secure_link = "0") {
        return 410;
    }
}

PHP

代码语言:javascript
复制
function base64url_encode($data) { 
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 

$file = '/downloads/file1.txt';
$expires = time() + 3600;

$md5 = base64url_encode(md5( $expires . $file . $_SERVER['REMOTE_ADDR'] . "secret" ));

$download_link = "http://example.com/downloads/?md5=$md5&expires=$expires";
EN

回答 1

Stack Overflow用户

发布于 2016-07-25 09:10:42

以下步骤是错误的

  1. 你不必把这句话写在引号里。这不是PHP。这里不需要引号。
  2. 在$remote_addr和秘密之间有一个空间。要么移除这个空间。或者在PHP代码中添加空间。
  3. 在Nginx中,使用参数($arg_expires)而不是$secure_link_expires
  4. 将下载链接更改为包含来自变量的文件名和建议,请将您的秘密放在所有参数之前。

代码语言:javascript
复制
$md5 = base64url_encode(md5( "secret" . $expires . $file . $_SERVER['REMOTE_ADDR'] ));
$download_link = "http://example.com".$file."?md5=".$md5."&expires=".$expires;

nginx配置

代码语言:javascript
复制
location /downloads/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 secret$arg_expires$uri$remote_addr;

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

    if ($secure_link = "0") {
        return 410;
    }
}

请看我的问题。我在模块里有一个比这个更大的问题。这在节点js中适用于我。我用PHP测试了我的代码。我还没测试过你的。但我想这是可行的;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37949905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档