2011-01-11 88 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>網絡)