2011-01-11 42 views
3

我有像product.exe这样的静态文件的下载。我想用.htaccess文件限制对这些文件的访问 ,以便只有特定的用户才能下载它。使用.htaccess限制对文件下载的访问

我认为这可以使用mod_rewrite处理,我发现这个片段在线 阻止坏的网站使用引用。

RewriteEngine on 
# Options +FollowSymlinks 
RewriteCond %{HTTP_REFERER} http://example.com/downloads/confirm/3811 [NC,OR] 
RewriteRule .* - [F] 

来源:http://www.javascriptkit.com/howto/htaccess14.shtml

而不是阻塞基于引荐,我想根据引荐允许。这样,引用者可以是一个URL,如果没有第一次登录就无法访问。我正在考虑走这条路线并使用http引用来授予文件许可。我知道这可能不是最好的方式,我想推荐人可能会被欺骗,但它不一定非常安全。我也接受其他想法,可能需要限制访问权限。

+0

如何使用PHP或Perl之类的脚本语言来处理用户验证并将文件提供给浏览器? – cdhowie 2011-01-11 06:55:53

+0

@cdhowie - 这就是我们目前正在做的事情,但是对于较慢的连接,下载失败很多,因为我们使用php来执行读取文件。我们想要直接下载。 – jimiyash 2011-01-11 07:15:58

回答

3

如果你想允许基于推荐人:

RewriteCond %{HTTP_REFERER} !^http://goodsite-1.com/ [NC] 
RewriteCond %{HTTP_REFERER} !^http://goodsite-2.com/from/there.php [NC] 
RewriteCond %{HTTP_REFERER} !^$ # There are some users/browsers not sending referrer.. 
RewriteRule .* - [F] 

也可以允许基于一个cookie,你可以与例如之前设置PHP:

RewriteCond %{HTTP_COOKIE} !^.*cookie-name.*$ [NC] 
RewriteRule .* - [F] 

或者仅允许POST请求:

RewriteCond %{REQUEST_METHOD} !=POST 
RewriteRule .* - [F] 

和你在你的HTML 'POST请求' 到文件链接下载:

<form method="post" action="path/to/download.mp3"> 
    <input type="submit" value="Click here to download!" /> 
</form> 

其实你可以结合这些方法。

0

由于一些安全问题http_referrer不是一个可靠的标题。

  • 一些浏览器配置导致空HTTP_REFERRER头
  • 有迹象表明,你可以操纵HTTP请求头的工具。 (Ctrl + Shift + I>网络)