2011-06-06 52 views
2

我正在一個用戶可以發佈筆記的網站上工作。我正在考慮允許用戶通過向圖像提供url來發布圖像(即不通過表單上傳)。允許用戶通過URL上傳圖片時應該注意什麼?

但是,我已經瞭解到,這可以用來做某種黑客行爲,例如,用戶可以粘貼一個不是圖像的url,所以當頁面加載時,GET請求將會被該網址。
我想知道:
1.可以做什麼其他惡意的事情,我該如何阻止它們?
2.是否有一個簡單的方法(只是使用JavaScript)來檢查一個url是否是一個圖像?

回答

6

當允許用戶上傳任意文件到服務器時(這是),有很多問題需要關注。

首先,你需要確保該文件是一個圖像,而只能作爲一個圖像(即不是作爲一個腳本執行)

其次,圖像不能過大或作爲訪問對用戶或服務器的DoS拒絕

第三,您需要確保以安全的方式保存映像,以便用戶不能覆蓋敏感文件。

第四,提供與您的主要內容不同的所有上傳內容。第五,確保您使用ImageMagick或GD處理圖像以刪除圖像中的任何不需要的數據。第五,確保您使用ImageMagick或GD處理圖像以刪除圖像中的任何不需要的數據。請記住,圖像文件可以用作不僅僅是可見數據的容器。

六:注意路徑注射,LFI,RFI等攻擊

七:不要依賴於擴展到告訴你的圖像是什麼類型的文件。自己檢查一下。

不過,我已經學會了,這可能是 用來做某種黑客攻擊,爲 例如,用戶可以粘貼網址 不是一個圖像,所以當頁面加載 ,一GET請求將發送到 那個url。

用戶是否要粘貼指向圖像的鏈接或從自己的計算機上傳文件?

  1. 還有什麼黑客可以用這個做什麼?

讓我們把這種方式:用戶上傳任意文件到您的服務器

  1. 有一種簡單的方式處理(使用JavaScript)來檢查的網址是 圖像?

不是真的,它不會幫助。你想要做檢查的事情

列表服務器端供您閱讀:

http://www.scriptygoddess.com/archives/2004/10/19/gifs-that-execute-a-php-script/

還有更多的問題...

+0

查看http://www.thinkfu.com/blog/gifjavascript-polyglots有關違反「只能作爲圖像訪問(即不作爲腳本執行)」的示例。 – 2011-06-06 16:26:11

+0

不要在不可信輸入上使用ImageMagick。瀏覽器的圖像解碼器已經比ImageMagick強化了緩衝區溢出和各種其他攻擊。您可以通過chroot jailing和syscall sandboxing或以其他方式運行虛擬化的特權來減輕風險。我對GD沒有經驗,所以不能評論它對不可信圖像的硬化程度。 – 2011-06-06 16:29:53

+0

重新配藥。有些東西可能會DOS瀏覽器成爲通過網絡即時傳送的有效映像。例如。包含自己的禁止服務的onload腳本的SVG圖像。 – 2011-06-06 16:32:44

0

如果嵌入一個未知的網址作爲圖片在HTML中,對這個URL的獲取請求將以任何方式完成,獨立於它真的是一個圖像或不是。

的問題是,這是否可以做一些傷害,無論是

  • 透露給它(和它嵌入在頁面)正在看着圖像的服務器(你真的不能避免這種而不會將圖像複製到您的服務器上)
  • 在當前查看器的用戶上下文(可能在此處登錄,並且不會自動執行此類操作)在映像的服務器上運行腳本,根據觀衆(並可能間接傷害觀衆)。您可以通過代理訪問或將映像複製到服務器來避免這種情況。)
  • 或被用戶的瀏覽器誤解爲腳本或其他有害內容,對網頁外觀或更惡意的東西做出奇怪的事情。我認爲這是大多數瀏覽器試圖通過跨站點訪問策略防範的原因。如果您將映像複製到服務器上,這可能會更糟糕。
+0

通過您自己的服務器代理它可以確保沒有憑據(讀取cookie)與請求不一致的XSRF發送。代理還可以幫助您解決混合內容問題。你是對的,儘管通過同一個來源代理它會打開一整罐蠕蟲。因此,在代理內容時,您需要使用不被任何存儲敏感數據或其內容受信任的頁面共享的域。 – 2011-06-06 16:58:24