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)