2010-04-21 176 views
59

我正在將我的文件(pdf,doc,flv等)加載到緩衝區中並使用腳本將它們提供給我的用戶。我需要我的腳本能夠訪問該文件,但不允許直接訪問它。什麼是達到這個目標的最好方法?我應該使用我的權限執行某些操作還是使用.htaccess鎖定目錄?阻止通過http直接訪問文件,但允許php腳本訪問

+0

願你看看[這]之前測試你的配置[1] [1] :http://stackoverflow.com/q/43951871/2441637 – 2017-05-13 15:19:24

回答

77

最安全的方法是將您想要保存的文件放在Web根目錄之外,就像Damien建議的那樣。這是有效的,因爲Web服務器遵循本地文件系統特權,而不是它自己的特權。

但是,有很多託管公司只允許您訪問Web根目錄。要仍然阻止對這些文件的HTTP請求,請使用阻止所有通信的.htaccess文件將它們自己放到一個目錄中。例如,

Order deny,allow 
Deny from all 

您的Web服務器,因此服務器端語言,仍然可以閱讀他們,因爲該目錄的本地權限允許Web服務器來讀取並執行文件。

乾杯。

+0

我已經使用此內部音頻文件夾,但它是停止我的音頻播放器播放音頻。我正在使用聲音管理器2播放音頻。是否有任何解決方法只允許聲音管理器播放該音頻文件,但是不能停止其他直接訪問? – sonill 2013-07-29 06:07:40

+3

@sonill - 您可以將某些IP列入白名單以便能夠訪問這些目錄。例如,添加一個帶有「Allow from 127.0.0.1」的新行將允許您的服務器(包括任何服務器端代碼)訪問該目錄中的文件。有關這些位的更多文檔可在http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html#allow – 2013-07-30 16:38:21

+1

「但是,有很多託管公司只允許您訪問Web根目錄。 「爲什麼這些公司不能將Web根放在比FTP根低一級的地方?他們對PHP的工作方式沒有任何知識(或者更可能是一種監督),還是隻關心自己的安全和金錢?哦,只需選擇一家公司,實際上會對您網站的安全性產生極大的影響。 – FluorescentGreen5 2017-03-30 04:58:18

2

這些文件與PHP腳本在同一臺服務器上嗎?如果是這樣,只需將文件保留在Web根目錄下,並確保您的PHP腳本對於存儲的任何位置都具有讀取權限。

28

這就是我阻止從URL直接訪問我的ini文件的方式。將以下代碼粘貼到根目錄下的.htaccess文件中。 (無需創建額外的文件夾)

<Files ~ "\.ini$"> 
    Order allow,deny 
    Deny from all 
</Files> 

settings.ini文件是根,沒有這個代碼是可訪問的www.mydomain.com/settings.ini

1

如果您有機會獲得你的httpd。 conf文件(在ubuntu中它位於/ etc/apache2目錄中),你應該添加與你在特定目錄中的.htaccess文件相同的行。這是(例如):

ServerName YOURSERVERNAMEHERE 
<Directory /var/www/> 
AllowOverride None 
order deny,allow 
Options -Indexes FollowSymLinks 
</Directory> 

執行此操作要控制信息的每個目錄下,你將不得不在一個地方一個文件來管理所有的訪問。它是上面的例子,我做了根目錄/ var/www。

此選項可能不適用於外包託管,尤其是共享託管。但這是一個比添加許多文件更好的選擇。

2

在httpd.conf中阻止瀏覽器& wget訪問包含文件,特別是說db.inc或config.inc。請注意,您不能在指令中鏈接文件類型,而是創建多個文件指令。

​​

在重新啓動Apache的

service httpd configtest 

然後(平滑重啓)

service httpd graceful 
相關問題