2016-05-18 55 views
1

我正在研究一個門戶網站,要求用戶上傳將顯示在特定HTML頁面中的圖像。這裏應該有什麼好的做法?要求用戶上傳圖像或使用遠程圖像

  1. 我應該避免上傳並要求用戶爲圖像提供自己的URL嗎?

  2. 要求用戶上傳圖片文件。

既然我們知道,如果圖像包含代碼注入,它可能是一個致命的圖像,但是對於遠程圖像,它們是安全的嗎?

謝謝

+1

遠程圖像意味着無論生活在遠程資源的圖像都可以隨時更改,完全不受您的控制。例如用戶粘貼到一個米老鼠的圖片鏈接,你贊成,然後用戶更改遠程圖像是硬核色情。 「哎呀呀」。 –

回答

2

這取決於你的網站的一致性。例如,如果目標受衆是他們更願意上傳的專業客戶,上傳要比輸入網址好得多,因爲向他們解釋什麼是遠程網址以及如何獲取它是很困難的。但上傳是一種更傳統的方式,感覺更容易。

另一方面,如果大多數目標受衆是互聯網用戶,則可能不需要提供上傳選項。但正如我所說的,上傳對用戶來說更自然,更容易。這也取決於圖像的類型,如果圖像是用戶的頭像,那麼上傳將適合,並且如果用戶正在將圖像添加到您的網站以僅共享從其他網站發現的圖像,則遠程網址會更合適。

將遠程服務器上傳到服務器並獲取遠程服務器可能是致命的,但是如果您使用遠程服務器來將url存儲在數據庫中,那麼它將不會產生安全問題。

所以,如果你想上傳功能或者存儲在遠程圖像到您的服務器,你必須做一些特定的步驟,以確保您的服務器的安全性:

  1. 驗證文件擴展名和MIME是有效的圖像。 (不要只在這個依靠。)

  2. 驗證這是一個有效的圖像文件(使用PHP和getimagesize)

  3. 調整大小和圖像複製到一個新的圖像對象。並將該圖像存儲到您的服務器中。

  4. 要存儲的文件夾必須通過使用禁用各種代碼執行。htaccess的(SetHandler默認處理程序)

1

那麼,這取決於項目的性質。

實際上任何方法都可以,但是您應該驗證並過濾用戶輸入。

如果文件是圖像,有很多選項可用於驗證文件。 從php的getimagesize()功能可以作爲一個例子,因爲每個圖像文件必須有一個分辨率和其他相關數據。

還有其他的問題在這裏也回答你的問題,你只需要看看。

Validate image file php

1

除了吳拉姆·阿里的建議:

確保消毒的文件名。最好的是爲用戶上傳的媒體生成新的文件名。

上傳目錄只有可寫的用戶權限,但這可能會導致一些複雜性。

除了解決安全問題之外,您還需要了解其他重要內容,例如取向,因爲從移動設備獲取的媒體可能具有隨機方向。