apache - 在下载文件之前使用 .htaccess 文件比较哈希
问题描述
TLDR:是否可以GET
使用 Apache .htaccess 文件比较附加到下载文件 URL 的参数中提供的 SHA1(或 MD5)哈希?如果哈希匹配,则提供文件,否则显示权限被拒绝错误。
这是我想做的事情:
首先,我有一个 Apache Web 服务器,我想用它来为用户提供静态文件。这些文件将是 PDF 文档/文本文件/图像/视频等。我想直接拒绝对这些文件的所有访问。我不想使用像 PHP 这样的脚本语言来提供这些文件,因为有些文件非常大。
接下来,我有一个单独的服务器,我将使用它来生成访问这些文件的链接。这些链接将包含一个安全哈希密钥(我在想 SHA1)。所以像(以PHP为例):
$access_token = sha1($file_name . $user_ip . $timestamp . $secret_salt);
然后我将提供给用户的链接将指向第一台服务器,看起来像(例如):
` https://www.example.com/?file=readme.txt&ip=192.168.0.1×tamp=0000000&hash=68761328
当用户点击链接时,我希望 Apache 服务器根据提供的参数生成哈希,secret_salt
并将其与用户提供的哈希进行比较。如果它们匹配 - 那么 Apache 可以提供文件,否则它应该显示权限被拒绝。
过去,我使用 .htaccess mod_rewrite 对 URL 参数或 Cookie 等进行简单比较。.htaccess 是否提供了这种比较安全哈希值的能力?
解决方案
这不是“.htaccess 是否提供...”——htaccess 只是一个配置文件,但与 apache 启动时读取的主 apache 配置不同,每次访问文件夹时都会读取 htaccess。
因此,第一个问题是,您运行的是什么版本的 Apache?2.4 版添加了 IF/ELSEIF/ELSE 逻辑和新的表达式语法。
下一个问题是,你能通过重写来完成这一切吗?您需要创建散列——表达式语法中有一些散列生成功能可能允许这样做。它可能需要是 PHP/Java/ap_exp 的组合。
htaccess 或 conf
如果您可以访问主配置文件,则将所有重写内容放在那里通常会更好地提高性能,因为每次访问文件夹时都会读取 htaccess 文件,因此对性能的影响很小。
一些想法
在我被另一个项目牵制之前,我正在研究一种类似于您所描述的反热链接策略。您可能想谷歌反热链接,因为有很多解决方案。
我遇到的一个问题是哈希或下载 UL 的有效期应该多长?什么应该导致它过期?因为如果它要具有足够长的寿命以用于实际目的,则可能需要针对不同程度的到期比较多个哈希值。
当然,您必须使散列过期 - 如果它是持久散列,用户需要做的就是在他们的热链接中使用相同的散列。同时,您不希望通过过期干扰下载来给用户带来不便。
所以我一路上的一些想法:
- 使用 cookie 控制过期和对文件服务器的访问
- 为每个请求的文件创建一个符号链接,并使用符号链接名称的哈希值,然后使用 cron 作业删除所有超过 n 小时的符号链接。
- 使用奇数/偶数小时(奇数哈希在每个奇数小时的顶部过期,用户根据他们请求的小时获得奇数或偶数哈希,因此他们总是有至少一个完整小时来完成下载)。
- 与其中一些一起使用反向代理文件服务器(在防火墙后面)。
我个人大部分是在 PHP 中完成的,但我认为 Apache Expressions 可以处理很多。
虽然这不是一个直接的答案(需要一些组装),但我希望它对您有用。
推荐阅读
- python - Python GUI 反复调用函数并按下按钮
- bash - 如何使用调用 shell 脚本的目录?
- python - 如何在 tkinter 中证明文本右对齐。?当变量 v=='hai' 机器人的回复想要来自右侧
- microsoft-graph-api - Blazor TokenAcquisition 抛出空引用异常
- amazon-web-services - SES VPC 端点不使用默认服务主机名
- sql - 如何使用 ODBC 连接 toad、SQL developer 和 SSMS?
- c# - 如何格式化/样式///
在 Web API 2 - reactjs - ReactJS:如何杀死`serve -s build`
- julia - 在 Julia 中添加包 - Frozen
- swift - 如何按元素对帖子数组进行排序?