2012-12-24 34 views
1

我正在寫一個web應用程序,我接受圖像源作爲url查詢參數。我想驗證圖像源以確保用戶/調用者沒有發送可能導致XSS或類似情況的請求。你能否給我一個驗證圖像src或正則表達式的好方法,它可以確保沒有惡意內容被推送到我的服務器並可能影響最終用戶。正則表達式來驗證圖像源

我能想到以下的圖像源的格式:

  1. http://foo.com/bar.jpg(絕對)
  2. /foo/bar.jpg(相對)
  3. 富/ bar.jpg(相對)

謝謝, Gaurav

+0

你使用哪種語言? –

+0

此時我正在使用Java。 –

+0

小心給出你認爲是XSS的例子嗎? – fge

回答

0

一個正則表達式可能不是你想要的。由於您使用的是Java,使用URI

final URI input; 

try { 
    input = URI.create(inputStringHere); 
} catch (IllegalArgumentException e) { 
    // Not even a valid URI: deal with it 
} 

// do other tests on input 
0

此解決方案假定你正在服用的URL作爲參數,然後檢索來自該網址服務器端的數據。

單獨使用正則表達式並不是一種可行的方式,因爲它僅檢查文件名,並不會告訴您實際數據是否是惡意的。我會這樣做的三個步驟:

  1. 測試文件名,以確保它在一個支持的類型結束。這不是爲了安全,而是爲了避免下載不可用的數據,而且實際上是可選的。例如:/\.(jpe?g|gif|png)$/
  2. 用HEAD請求而不是GET請求查找數據所在的Web服務器。確保返回的MIME類型與預期的圖像類型匹配。這是安全的第一線。如果不好,請不要獲取數據。否則:
  3. 下載數據,並在本地進行測試,以確定它確實是服務器說的MIME類型。如果您處於unixy環境中,請嘗試通過file -I -管道傳輸文件數據。

即使這樣也不能絕對保證安全,但它應該剔除掉最明顯的矢量攻擊。