下载文件之前使用.htaccess文件比较哈希

时间:2019-04-25 17:43:17

标签: apache .htaccess

TLDR:是否可以使用Apache .htaccess文件比较附加到下载文件URL的GET参数中提供的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&timestamp=0000000&hash=68761328

当用户点击链接时,我希望Apache服务器从提供的参数和secret_salt生成哈希,并将其与用户提供的哈希进行比较。如果它们匹配-Apache可以提供文件,否则它将显示拒绝权限。

过去,我曾使用.htaccess mod_rewrite来对URL参数或Cookies等进行简单比较。.htaccess是否提供此功能来比较安全性哈希值?

1 个答案:

答案 0 :(得分:0)

不是“是否可以提供.htaccess提供...”-htaccess只是一个配置文件,但是与apache启动时读取的主要apache配置不同,每次访问该文件夹时都会读取htaccess。

因此,第一个问题是,您正在运行哪个版本的Apache? 2.4版增加了IF / ELSEIF / ELSE逻辑和新的表达式语法。

下一个问题是,仅通过重写就可以做到所有这些吗?您需要创建散列-表达式语法中有一些散列生成功能可能允许这样做。可能需要结合使用PHP / Java / ap_exp。

htaccess或conf

如果您有权访问主配置文件,则最好将所有重写都放在这里,因为每次访问文件夹时都会读取htaccess文件,因此对性能的影响不大。

一些想法

在研究另一个项目之前,我正在研究一种类似于您所描述的反热链接策略。您可能要使用Google反热链接,因为有很多解决方案。

我遇到的一个绊脚石是,哈希或下载UL有效期应为多长时间?什么会导致它过期?因为如果要有足够长的寿命来满足实际用途,则有可能需要比较多个散列来比较不同的到期时间。

当然,您必须使哈希过期-如果它是持久哈希,则用户所需要做的就是在其热链接中使用相同的哈希。同时,您不希望通过使到期干扰下载而给用户带来不便。

所以我一直有一些想法:

  • 使用cookie来控制过期时间和对文件服务器的访问
  • 为每个请求的文件创建一个符号链接,并使用该符号链接名称的哈希值,然后使用cron作业删除所有早于n小时的符号链接。
  • 使用奇数/偶数小时(奇数哈希值在每个奇数小时的顶部到期,用户根据请求的小时数获得奇数或偶数哈希值,因此他们总是至少有一个完整的小时来完成下载)。 / li>
  • 在其中使用一些反向代理文件服务器(在防火墙后)。

我个人大部分都是在PHP中完成的,但是我认为Apache Expressions可以处理很多事情。

虽然这不是直接答案(需要一些装配),但我希望它对您有用。