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×tamp=0000000&hash=68761328
当用户点击链接时,我希望Apache服务器从提供的参数和secret_salt
生成哈希,并将其与用户提供的哈希进行比较。如果它们匹配-Apache可以提供文件,否则它将显示拒绝权限。
过去,我曾使用.htaccess mod_rewrite来对URL参数或Cookies等进行简单比较。.htaccess是否提供此功能来比较安全性哈希值?
答案 0 :(得分:0)
不是“是否可以提供.htaccess提供...”-htaccess只是一个配置文件,但是与apache启动时读取的主要apache配置不同,每次访问该文件夹时都会读取htaccess。
因此,第一个问题是,您正在运行哪个版本的Apache? 2.4版增加了IF / ELSEIF / ELSE逻辑和新的表达式语法。
下一个问题是,仅通过重写就可以做到所有这些吗?您需要创建散列-表达式语法中有一些散列生成功能可能允许这样做。可能需要结合使用PHP / Java / ap_exp。
htaccess或conf
如果您有权访问主配置文件,则最好将所有重写都放在这里,因为每次访问文件夹时都会读取htaccess文件,因此对性能的影响不大。
一些想法
在研究另一个项目之前,我正在研究一种类似于您所描述的反热链接策略。您可能要使用Google反热链接,因为有很多解决方案。
我遇到的一个绊脚石是,哈希或下载UL有效期应为多长时间?什么会导致它过期?因为如果要有足够长的寿命来满足实际用途,则有可能需要比较多个散列来比较不同的到期时间。
当然,您必须使哈希过期-如果它是持久哈希,则用户所需要做的就是在其热链接中使用相同的哈希。同时,您不希望通过使到期干扰下载而给用户带来不便。
所以我一直有一些想法:
我个人大部分都是在PHP中完成的,但是我认为Apache Expressions可以处理很多事情。
虽然这不是直接答案(需要一些装配),但我希望它对您有用。