簡體   English   中英

安全圖像(JPG、PNG、動畫 GIF)上傳

[英]Secure Image (JPG, PNG, Animated GIF) Upload

我正在尋找最佳解決方案(=> 安全、快速、獨立)來解決靜態 jpg / png 和動畫 gif 文件(如果文件是 gif 但不是不動畫,將其設為 png)。

獎勵信息:我正在 Amazon EC2 服務器上用 PHP 執行上傳腳本,並將圖像上傳到 Amazon S3 存儲桶。 如果這有什么改變,請告訴。

獎勵信息2:解決這個問題后,我想在圖像下方添加一個類似DAMNLOL的水印(像這樣: http ://www.damnlol.com/i/916d72c17e572b14a14c283b2f96f997.jpg)。

到目前為止我是如何解決這個問題的:

  1. 用戶從 URL 中選擇要上傳的文件,繼續到 PHP 腳本(不會在用戶中止時中止)。

  2. 腳本獲取圖像,進行一些檢查:最大文件大小, $_FILES['file']['type'] _ $_FILES['file']['type']必須是“image/gif”、“image/png”、“image/jpg”。 最大/最小寬度和高度檢查。 如果一切正常,請繼續。

    • 如果用戶從他的本地計算機上傳圖像,請使用臨時名稱將圖像存儲在服務器上。 之后,php 腳本使用 CURL 和臨時 url 作為輸入調用http://regex.info/exif.cgi
    • 或者在提交 url 的情況下,php 腳本使用 CURL 和提交的 url 作為輸入調用http://regex.info/exif.cgi
  3. Jeffrey(Jeffrey 代表 Jeffrey's Exif viewer (regex.info/exif.cgi))給了我一個回應。 如果這意味着圖像確實是 PNG、JPG 或 GIF 類型,腳本會下載文件(如果是提交的 url)或將文件(如果是上傳的圖像)移動到最終圖像文件夾。 成功!

如您所見,當您通過 URL 提交文件並且 URL 將 Jeffrey 重定向到有效圖像但我的服務器重定向到惡意代碼時,該腳本很容易受到攻擊。 至少我是這么認為的。

在我看來,這個解決方案很慢但相當安全。 上傳需要大約 2-5 秒,具體取決於文件大小。 GIF 往往需要大約 4-10 秒。 其他站點不需要那么長時間並且仍然是安全的。


關於如何解決問題的想法:

  • 顯然,Jeffrey 每次都能找出實際的文件類型。 PHP中有這樣的防彈方法嗎? 顯然,通過文件名來決定文件類型是一種非常糟糕的解決方法。

  • 結合信息2,我可以簡單地獲取提交的圖像,獲取寬度和高度信息,創建一個新的空白圖像(new_image_width = submit_image_width, new_image_height = submit_image_height + watermark_height)並將提交的圖像與它下面的水印一起存儲。 如果整個過程失敗,則提交的圖像不是 JPG / PNG / GIF 類型,腳本將中止。 將水印添加到動畫 GIF 時可能會有點棘手,但顯然是可能的(--> http://forgifs.com/gallery/d/206365-1/Fitness-ball-roof-jump.gif )。

你覺得我的想法怎么樣? 您對這個特定問題有任何詳細的解決方案嗎? 我已經知道很長時間了,並就該主題進行了多次研究,但我從未找到“最佳”解決方案。

感謝您的時間。 願我們最終解決這個問題,並幫助我和成千上萬在谷歌日日夜夜尋找這個問題的解決方案的人。

我使用http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop/的修改版本至少你可以查看代碼並獲得一些關於制作文件上傳過程的想法有點安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM