2012-03-03 69 views
0

我讀this artcile上的文件上傳安全,但現在看來,我上傳的有效PDF被授予訪問禁止後實施這個htaccess頂部提到的其他安全方法:文件安全使用htaccess阻止普通的pdf文件

deny from all 
<Files ~ "^\w+\.(gif|jpe?g|png|pdf|doc|docx|txt|rtf|ppt|pptx|xls|mp4|mov|mp3|mpg|mpeg)$"> 
order deny,allow 
allow from all 
</Files> 

文件名看起來是這樣的: 公司APV-A4-Solarpanels_ABC-RH.pdf

因爲htaccess的是爲了防止雙倍擴展攻擊,如果我理解正確的話應該是罰款。希望有人能幫助!

+1

_doubled extension attack_(這只是Microsoft Windows用戶使用_Hide已知文件類型選項_ON_時出現的一個問題,它是一個選項,我總是關閉_OFF_)意味着一個名爲OpenMe.pdf.exe的文件作爲「OpenMe.pdf」)或類似的正則表達式不匹配的用戶。 - 爲什麼要保護Windows用戶不受Microsoft創建的問題的困擾? – 2012-03-03 09:28:27

+0

我認爲這篇文章解釋得很好,該MIME類型可以被欺騙,這也適用於Apache,這意味着PHP腳本可能被嵌入到圖像中,例如... – scott 2012-03-04 10:32:12

回答

0

爲什麼不:

SetEnvIf Request_URI "(^|/)[-\w]+\.(gif|jpe?g|png|pdf|doc|docx|txt|rtf|ppt|pptx|xls|mp4|mov|mp3|mpg|mpeg)$" allowed 

<Files *> 
    Order deny,allow 
    Deny from all 
    Allow from env=allowed 
</Files> 

另外請注意,我放棄了強制性領先^因爲你一定要允許訪問這些擴展的子目錄和[-\w]+-\w

我只是開始我的正則表達式\.(gif ...因爲你真的只需要檢查你想要的擴展名。由你決定。

+0

嗨特里,感謝您的答覆。看起來不錯,但在我執行之前,我想了解更好一點,對我來說有點複雜......如果我從這裏明白了理由http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html setenvif會檢查文件的http標題是否有效。我認爲這就是我原來的劇本所做的。原始腳本似乎也能在子目錄中正常工作 – scott 2012-03-04 10:35:33

+0

有兩個方面(i)您絕對不會將'ABC-RH.pdf'與'\ w + \。pdf'匹配。 '\ w' meta不包含「'」「。你需要'[ - \ w] *'在這裏,或者放棄它(如果一個文件包含'%20'?)。(ii)** SetEnvIf ** vs ** FilesMatch ** vs **文件〜**:這是一個比性能優先考慮的問題。我喜歡我的模式,因爲它的意圖非常清晰。 – TerryE 2012-03-04 11:08:30

1

我剛剛在研究別的解決方案時遇到了這個問題。但是,要做出一個更簡單的解決方案,因爲你基本上要防止所有雙擴展,你應該這樣做:

Order Allow,Deny 
<FilesMatch "^[^.]+\.(gif|jpe?g|png|pdf|doc|docx|txt|rtf|ppt|pptx|xls|mp4|mov|mp3|mpg|mpeg)$"> 
Allow from all 
</FilesMatch> 

更重要的一點,更簡單。使用FilesMatch(因爲FilesMatch更好地利用了REGEX並且多於Files),它使用'Order Allow, Deny'指令,這意味着匹配允許或拒絕,如果不匹配,則拒絕。所以這否認除了允許的東西以外的所有東西。

[^.]意味着任何字符'不'字面期間。這幾乎涵蓋了你想要實現的一切。請記住,這些規則不允許使用大寫的文件擴展名。有些人使用創建大寫文件擴展名的舊應用程序,因此您可能也希望包含這些擴展名。

我不知道的「/i」不區分大小寫有多好作品與FilesFilesMatch所以你可能想要做的字符類是這樣的:

([Jj][Pp][Ee]?[Gg]|[Pp][Nn][Gg]|[Gg][Ii][Ff]|[Pp][Dd][Ff]) 

等。