2009-09-28 148 views
3

我正在編寫一個小型PHP應用程序,我不確定是否存在安全問題。因此,這是應用程序的功能:安全問題?

  • 用戶可以上傳任何圖像文件(PNG,GIF,JPG,JPEG,TIFF和其他幾個人)或zip文件

我檢查mime-類型和擴展名,如果不是允許的,我不允許上傳(這不是我擔心的部分)。

現在,一旦上傳,我將文件重命名爲一個唯一的散列並存儲在根訪問之外的文件夾中。

用戶現在可以通過一個簡短的URL訪問該文件。我通過爲頭設置正確的mime類型來使文件可訪問,然後我只使用readfile()。

我的問題是在圖像文件中包含jar文件的漏洞是否可以在這裏使用?我以純粹的形象服務於形象。

如果它有什麼辦法來防止這種情況發生?

謝謝。

+0

「壓縮文件」,你提取的內容和測試(甚至保存)包含在存檔每個圖像? – VolkerK 2009-09-28 22:35:04

+0

不,zip文件被強制下載......只有我在瀏覽器中顯示的東西都是圖片,但始終作爲一個真實的圖像或影像標記內... – mistero 2009-09-28 22:38:55

+0

順便說一句我最關心的是自己的服務器secuirty不是第三方用戶secuirty誰打開該圖像... – mistero 2009-09-28 22:41:05

回答

5

MIME類型檢查不能解決GIFAR問題。2009年的JRE中已經修補,但如果你想解決這個問題,您可以

  • 從不同的域
  • 運行服務器端代碼即成圖像進行檢查圖像是否包含一個有效的JAR,就像提到here

其他任何情況(對於具有足夠舊的JRE的任何支持Java的瀏覽器拒絕文件)可能會在特定情況下失敗。

還要記住,要使用這種技術執行良好的攻擊,您的服務器基礎結構將不得不稍微打開(請求來自同一個域的事實並不意味着您應該提供它請求的任何信息。)

+0

+1謝謝。似乎有些人從未聽說過這個漏洞 – 2009-09-28 22:54:41

+0

MIME類型是由客戶端瀏覽器報告的 - >它可以很容易僞造。 – Jacco 2009-09-29 09:09:38

1

檢查MIME類型是不夠的,因爲可以僞造(或任何其他)HTTP頭字段。確認文件是有效圖像的最佳方法是嘗試以編程方式將其作爲圖像讀取。如果可以將它解析爲圖像,則可以合理確信它不是惡意代碼。

+0

下垂者是否在意留下評論? – Asaph 2009-09-28 22:24:30

+0

該jar利用實際上使真實圖像在任何圖像查看器中驗證。 – 2009-09-28 22:24:35

+0

在這種情況下,調整圖像的大小(您最終可能會這樣做),並且您會相當安全。 – Asaph 2009-09-28 22:26:06

1

相關:ensuring uploaded files are safe

任何一種隱藏攻擊像你描述不應該影響的,因爲你處理的方式服務器。您只需存儲二進制信息,然後檢索二進制信息,而無需處理它。嘗試顯示被利用內容的瀏覽器可能處於危險之中,但標準圖像類型相當安全。

如果您想要更安全,可以在每個上傳的文件上運行防病毒軟件。如果您在* nix平臺上,則可以使用行業標準ClamAV

我會更擔心有人試圖上傳一個非常大的圖像文件。

+0

我也在檢查silesize。謝謝你指出,雖然。 – mistero 2009-09-28 22:29:50

+0

對於windows用戶,還有另一款出色的產品ClamWin。 – NotMe 2009-09-28 22:33:34

0

你可以做2件事。從images.domain.com服務您的圖片。這將不得不在另一個物理/虛擬服務器或防火牆上,以便服務器上的開放端口不能從該域訪問。

或者你可以通過java腳本(非javascript)運行圖像文件,如here。這會告訴你是否在圖像中嵌入了一個jar文件。

在這裏此問題的詳細信息:

http://www.gnucitizen.org/blog/java-jar-attacks-and-features/

+0

如果整個目的是爲了使網址很小,我將如何通過另一個域來服務他們?我需要readfile()它...我可以只在我的服務器上禁用jar執行權限? – mistero 2009-09-28 22:31:50

0

我其實沒有甚至聽到關於你的問題之前,這種攻擊,所以第一關,感謝啓發我!谷歌搜索,似乎基本上有兩種不同的攻擊媒介在這裏。兩者都包括攻擊者引誘「普通」用戶到惡意網站指向僞裝JAR文件,並且都做的事實,JAR將在您的網站的「上下文」來執行(即起源將是你的網站)。

首先攻擊與小程序能夠讀取用戶的cookie,這基本上意味着這將是能夠竊取用戶的登錄信息,爲您的域名做。

第二個問題與小應用程序現在被允許打開到域中其他套接字的連接有關,如果服務器防火牆後面的用戶訪問惡意頁面,這非常糟糕(使攻擊者有效地繞過你的防火牆)。

所以這種攻擊並不一定直接傷害你的服務器,但它傷害你的用戶 - 希望你關心你的用戶。您可以做的兩件事情確保他們的安全已經在大多數其他答案中提到,並在this page上進行了總結。