mod_secdownload (Lua)
mod_secdownload.lua 使用有时效的代码保护文件
安装
默认情况下,发行版(以及 make install
)应该提供必要的文件;但您始终可以在 contrib 文件夹中找到它们
secdownload.lua
secdownload__secdownload.lua
这样您就可以根据需要修改它们(尽管建议更改文件和操作的名称,以免发生冲突)。
secdownload (操作)
使用有时效的代码保护文件
secdownload options;
- 选项
- 一个包含以下条目的键值表
- prefix
- 要保护的 URL 路径前缀;默认值为 "/"
- document-root
- 秘密文件在磁盘上的存储位置
- secret
- 用于创建和验证 URL 的共享密钥。
- timeout
- 生成 URL 的有效时长,单位为秒(允许的最大时间差);默认为 60
prefix
不用于构建文件名;请在 document-root
中手动包含它(作用类似于 alias "/prefix" => "/docroot"
,参见 alias
)。
secdownload 实际上不处理(有效)请求,它只提供到文件名的映射(并拒绝无效请求)。
示例
setup {
module_load "mod_lua";
lua.plugin "secdownload.lua";
}
secdownload [ "prefix" => "/sec/", "document-root" => "/secret/path", "secret" => "abc", "timeout" => 600 ];
生成 URL
要生成对 secdownload
有效的 URL,您需要使用相同的密钥。
URL 的形式为 prefix + md5hex(secret + filepath + timestamp) + '/' + timestamp + filepath
;timestamp 是格式化为十六进制数字的 Unix 时间。
例如使用 PHP
$secret = "abc";
$uri_prefix = "/sec/";
# filename; please note file name starts with "/"
$f = "/secret-file.txt";
# current timestamp
$t = time();
$t_hex = sprintf("%08x", $t);
$m = md5($secret.$f.$t_hex);
# generate link
printf('<a href="%s%s/%s%s">%s</a>', $uri_prefix, $m, $t_hex, $f, $f);
上面的配置示例会将此 URL 映射到文件 /secret/path/secret-file.txt
。
有关更多示例,请参见 mod_secdownload (lighttpd 1.4.x)。