在没有查询字符串令牌的情况下阻止目录浏览和文件检索

时间:2009-11-12 04:07:18

标签: php

我有一个付费下载包,我想托管在我的一个网络服务器的深层文件夹中。我使用Options -Indexes

关闭.htaccess中的目录浏览

但是我还希望通过在服务器让它们离开之前在Querystring上出现令牌来进一步锁定这些有价值的文件。

这可能吗?

他们是一个更好的方法,是免费的,不需要密码吗?

2 个答案:

答案 0 :(得分:3)

如果您直接链接到该文件,例如zip或exe,则无法使用任何查询字符串标记来保护该文件。

您需要做的是创建一个PHP脚本,从深层目录(或最好是Web根目录之外的目录)中提取下载文件并将其流式传输给用户。这样您就可以请求查询字符串令牌,并且只有在令牌匹配时才执行脚本。请注意,令牌基本上充当弱密码。

此脚本将向您展示如何从Web服务器上的目录中获取pdf。请求和验证查询字符串应该非常容易:

http://www.finalwebsites.com/forums/topic/php-file-download

同样,您应该将受保护的文件存储在Web根目录之外。否则,任何能够计算出直接路径的人都可以轻松地通过脚本来直接下载文件。

答案 1 :(得分:2)

如果匹配,您可以检查查询令牌并重定向到该文件:

<?php
  if(isset($_GET['token']) && $_GET['token'] == 42){
    header('Location: http://example.com/file.blah');
  }
  else{
    die('sorry!');
  }
?>

请注意,这实际上是默默无闻的周安全性。用户注意重定向并直接命中文件不会花费太多时间。

更好的解决方案需要您流式传输文件...正如@Ciaran所描述的那样(感谢发布它比我刚刚发布的更好,更清晰!)。

正如@Ciran所说,这也不是很安全。如果文件不是非常敏感,那么在一段时间后文件过期可能“足够好”。