zoukankan      html  css  js  c++  java
  • Lighttp通过mod_magnet实现类似mod_secdownload的功能

    作者:yaoe  链接地址:

    用过lighttpd的mod_secdownload模块,我总觉得不够灵活,比如不能验证ip,不能自定义加密串格式,还好有mod_magnet模块,能够自己用lua写一个类似mod_secdownload的脚本
    首先mod_magnet模块默认不支持remoteip,不过官网有补丁,虽然不适应1.5版本,但可以自己修改源码并编译mod_magnet模块.

    新建lua文件/etc/lighttpd/magnet/seclink.lua

    require 'md5'

    skey1 = "my key 1"
    skey2 = "my key 2"
    realpath = "/realpath/"

    ip = lighty.env["request.remoteip"]

    safe = false
    for mp, etime, filepath in string.gmatch(lighty.env["request.uri"],"/slink/(%x+)/(%d+)/(.+)") do
    mc = md5.sumhexa(filepath .. skey1 .. etime .. ip .. skey2)
    if (tonumber(etime) < os.time()) then
    return 403
    end
    if (mp ~= mc) then
    return 403
    end
    lighty.env["physical.path"] = realpath .. filepath
    safe = true
    end

    if (safe == false) then return 400 end

    在lighttpd.conf中的对应站点配置下加入

    $HTTP["host"] == "youdomain.com" {
    ......
    $HTTP["url"] =~ "^/slink/" {
    magnet.attract-physical-path-to = ( "/etc/lighttpd/magnet/seclink.lua" )
    }
    ......
    }

    在php中生成链接的代码

    <?php
    $skey1 = 'my key 1';
    $skey2 = 'my key 2';
    $uri_prefix = '/slink/';
    $f = "test.tar.gz";
    $timeout = sprintf('%d', time()+60);
    $realip = @$_SERVER['REMOTE_ADDR'];
    $m = md5($f.$skey1.$timeout.$realip.$skey2);
    $slink = $uri_prefix.$m.'/'.$timeout.'/'.$f;
    echo $slink
    ?>

    别忘记安装lua的md5支持模块

    $ sudo apt-get -y install liblua5.1-md5-0

    如果访问链接出现500错误,一般问题出现在lua脚本内,可以在 /var/log/lighttpd/error.log 文件查看详细信息

    转:http://yaoe.info/archives/2011/02/lua-auth-security-link-via-mod_magnet.html

  • 相关阅读:
    Python_异常处理
    Python_文件相关操作
    Python_集合
    Python_字典
    Python_元组
    Python_列表操作2
    Python_列表操作1
    Spring-Data-Jpa使用总结
    SpringBoot源码分析之---SpringBoot项目启动类SpringApplication浅析
    RESTful API批量操作的实现
  • 原文地址:https://www.cnblogs.com/shuaixf/p/2285318.html
Copyright © 2011-2022 走看看