.htaccess拒绝从脚本下载文件

时间:2012-02-08 16:47:14

标签: php javascript .htaccess

美好的一天,

我的站点root中有一个名为documents的文件夹,这是受.htpasswd文件保护的密码,但是脚本可以访问它来查看。

如何让脚本能够直接从目录中直接访问文件来下载文件?

我举一个例子来解释这种情况。

在我的主页上我显示图片test.jpg,此图像位于受保护的文档文件夹中。图像在主页上正确显示。

如果在地址栏中输入www.domain.com/documents/test.jpg,则不会显示或下载,但会要求输入密码。(这是我想要的,但不希望别人输入密码他们想要下载的每个文件)

有没有办法可以让php或JavaScript下载文件而无需提示输入密码?换句话说,绕过.htaccess规则?

提前

thanx

2 个答案:

答案 0 :(得分:1)

我已经重新添加了PHP和Javascript。没有什么能阻止你编写一个重映射PHP脚本,它位于文档文件夹之外,因此无需Apache身份验证即可访问。这可以发出readfile()来发送文件(有关更详细的说明,请参阅文档示例和用户贡献。由于这是服务器端脚本,因此它可以直接访问受保护的目录。

当然,您可能希望实现某种形式的访问控制,例如附加请求参数检查,该参数基于文件名的md5加上共享密钥。这在调用脚本中很容易计算。但是,一旦您将此类访问协商转移到客户端脚本,您需要接受这可以由任何有经验的黑客进行逆向工程和利用。

作为脚注,如果您想允许用户下载图像,为什么要将它们放在访问受控目录中。为什么不将它们移出这个目录?

答案 1 :(得分:1)

正如Barry所说,.htaccess是在任何PHP之前处理的,因此绕过它不是一种选择。您必须更改.htaccess配置或编写重映射PHP脚本。

我建议更改.htaccess配置以允许直接下载链接但拒绝目录列表。这将允许人们在不提示输入密码的情况下下载http://www.example.com/documents/some-file-name.ext等直接链接,但他们必须提前知道链接 - 他们将无法查看/documents/文件夹看到那里的一切。

您可以通过注释掉或删除Auth指令来执行此操作:

#AuthUserFile /path/to/.htpassword
#AuthName "Name"
#AuthType Basic
#Require Valid-User

添加指令以阻止目录列表:

Options -Indexes