2012-06-25 48 views
1

我在我的web根文件夾中有一個用於映像存儲的文件目錄,我想知道如何保護該文件夾。我阻止人們上傳腳本到該文件夾​​,我檢查文件擴展名,如果它不是一個圖像,那麼它不會保存到該文件夾​​。如何防止腳本在目錄中運行?

但僞造的擴展很容易做到,如果有人設法腳本上傳到我的文件目錄和訪問來自瀏覽器

,所以我需要一種方法來阻止腳本從該文件夾內,運行只允許發生的事情圖像運行。

我知道htaccess可以做到這一點,但我不知道如何設置它。我的.htaccess文件是這樣的:

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi 
Options -ExecCGI 
ForceType application/octet-stream 
<FilesMatch "(?i)\.(gif|jpe?g|png)$"> 
    ForceType none 
</FilesMatch> 
Options All -Indexes 

,但它不工作,我保存該文件夾中的PHP文件,然後試圖從瀏覽器訪問它,我仍然可以訪問它。你知道如何使這項工作?或者如果你有更安全的方法,請告訴我。

謝謝

回答

1

我認爲這是不工作,因爲你只有添加一個額外的處理器,你有沒有刪除了其他處理程序。

這是最簡單的把另一個.htaccess文件包含要保護(而不是與比賽指導搞亂)的文件夾中:

# Fix PHP, you should do matching commands for JSP and ASP, & html 
RemoveType application/x-httpd-php php 
# .... add the other remove-handler statements here .... # 

# Optionally make these equivalent to text files. 
# UPDATE: Taken this out as you dont want people to see PHP files at all 
#AddType text/html php 

# To disable cgi and server side includes & indexes 
# You need to check the setup of Apache, some of the file types 
# listed should already be handled as CGI (.pl, .py, .sh) 
Options -ExecCGI -Includes -Indexes 

# Completely block access to PHP files 
<FilesMatch "\.(php|phps|html|htm|jsp|asp)$"> 
    Order allow,deny 
    Deny from all 
</Files> 
# Add in any additional types to block 

這包括PHP和CGI,你應該做的匹配命令對於JSP和ASP

更新:添加代碼來完全阻止對PHP文件的訪問 - 抱歉,最初認爲你根本不希望它們執行。另外請注意,我已經將PHP文件轉換爲文本文件的行註釋掉了。

+0

如果您希望將所有配置保存在一個文件中,則不需要聰明的匹配指令,只需將上面的配置指令放在塊內,指向您想要配置的目錄 – Cheekysoft

+0

正確的@Cheekysoft。我通常寧願將.htaccess文件放在它們所屬的文件夾中,因爲這意味着它們即使移動也仍然可以工作。當然,最好不要使用它們,而是在有權訪問它們的情況下將它們放入適當的Apache配置文件中。 –

+0

我試着在我的.htaccess文件裏面的文件目錄中使用你的代碼,但我仍然可以訪問.php文件。 –

相關問題