台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
2038
 
會員總數:197934
接案會員:6196
文章總數:2320
討論主題:151331
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 請教判斷是否為真的圖檔的方法

[變換順序]
[我要回覆]


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請教判斷是否為真的圖檔的方法
價值 : 10 QP  點閱數:2270 回應數:24

點圖分享到Plurk吧!
樓主

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen
剛才讀到
http://www.mikekunz.com/image_file_header.html
這篇教人如何藉由讀取檔案前2,3個byte,來判斷是否真的是圖檔, 請問,若要做網頁供人上傳圖片,用這種方法,是否就真的可以確認,不會被上傳亂七八糟(例如病毒檔)檔案了? 或者,有什麼方法,可以確定上傳的一定是圖片,謝謝
本篇文章發表於2007-08-01 18:04
=========================================
網站 : http://www.allenkuo.com/
VP、EP、QP、HP該如何使用? 免費申請藍色部落
1樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
除此之外,還可以用RegularExpressionValidator去限定上傳檔案的副檔名,
先過濾掉大部分假圖檔。


本篇文章回覆於2007-08-01 19:09
2樓
回應

大頭源 版主
中級顧問
24849 180
13226 4872

捐贈 VP 給 阿源哥哥 檢舉此回應
Allen兄的意思應該是指有心人士,將一些傳亂七八糟(例如病毒檔)檔案的副檔名改成
gif或jpg等合法的副檔名,所以個人猜想用RegularExpressionValidator應該是擋不掉的。
且駭客也是有辦法中止掉前端的檢查,所以後端還是要再檢查一遍才保險。

記得有一本書提到,不管前端作了再多的檢查,到了後端都要假設傳過來的資料是不安全的
一定都要再經過一道檢查手續的。

隨著網頁愈來俞炫,讓使用者上傳檔案的功能一定是有須求的,不只是圖檔,也有可能是
影音等各式各樣的檔案,而網頁又不像是內部用的Win AP是對外公開的,所以受到攻擊的機會
相對的就比較多了。所以該如何防止應該是個重要的課題。

推一把,有經驗的大大能否分享一下經驗。

Allen兄,怎麼那麼小器,才10QP。 ^_^





本篇文章回覆於2007-08-01 21:50
阿源哥哥的軟體組裝工廠:http://blog.xuite.net/keigen/SoftwareFactory

新書內容簡介:http://blog.xuite.net/keigen/books/27268981

Silverlight 4 和 Ria Service的商業應用程式:http://blog.xuite.net/keigen/SoftwareFactory/33190644
3樓
回應

unicorn
中級專家
3160 0
2838 525
捐贈 VP 給 unicorn 檢舉此回應
偷懶的方式
幫圖檔做縮圖,如果沒exception 應該就是圖檔啦


本篇文章回覆於2007-08-01 21:57
4樓
作者回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
to #2,
對厚,忘了給多一點點數,呵

to #3,
這也是一個方法,若真要這麼做,倒不必去讀前幾個byte了,但如果讀前幾個byte真的可以治本,倒是比較好的作法,只是不知道是否安全


本篇文章回覆於2007-08-01 22:26
=========================================
網站 : http://www.allenkuo.com/
5樓
回應

Jerry Lai
初級顧問
19942 17
7554 3311

檢舉此回應
用製作縮圖的方式個人不甚贊同,
萬一哪天又發生個緩衝區溢位的漏洞, 或是自己沒控制好,
或是故意開一個幾G的超大圖檔,
很容易就中招了

最標準的還是讀取前幾個byte
這樣其他檔案格式也可以讀出來, 也最節省系統資源

但實際作法還是要看你的系統後續對該圖檔要做甚麼處理
才能知道怎麼做比較好


本篇文章回覆於2007-08-01 23:25
6樓
作者回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
Jerry,
如果是intranet,使用者上傳圖片,是比較沒危險性
但若在internet供會員上傳相簿,或者撰寫文章時,利用html editor 上傳圖片, 我就擔心會中招,圖片的後續處理,多半是直接呈現,或者另外做小圖
所以才會想了解有沒有什麼方法,是可以真的檢查出來它的真實性

請問讀前幾個byte,這方法是穩當的嗎?


本篇文章回覆於2007-08-02 09:35
=========================================
網站 : http://www.allenkuo.com/
7樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
一般都只讀前2個byte來判斷,也許有點風險,
如果照樓主的文章,JPG讀9個byte,GIF讀3個byte,
BMP讀2個byte,應該是很穩當的。


本篇文章回覆於2007-08-02 09:53
8樓
回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
想請問大家,在.NET裡面要如何去讀檔案的byte呢??


本篇文章回覆於2007-08-02 09:57
9樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
簡單寫就這樣而已...




本篇文章回覆於2007-08-02 10:11
10樓
回應

ASP.NET新手
中級專家
5568 54
5390 2176
捐贈 VP 給 ASP.NET新手 檢舉此回應
=.=
如果是要防惡意檔案的話,我想答案應該是無解的

有用過DOS的合併檔案指令的話就會知道

A+B+C+..........=A

即使它是一個正常的圖檔,也可能是夾帶病毒或SCRIPT的圖檔

就像有些偽裝軟體,可以把影片分割並偽裝成圖片,表面上是正常的圖片,經過軟體組合即可還原成影片

當檔案上傳時是沒有影響的,但當無辜的使用者去讀取這張圖片時
很可能就中彈身亡了

僅能防君子,無法防小人啊∼


本篇文章回覆於2007-08-02 10:35
11樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
對喔...都忘了還有合併檔案這招,
殘念~



本篇文章回覆於2007-08-02 11:02
12樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
借問一下喔...

如果某用戶上傳了合併後的偽圖檔(例如:JPG和exe檔合併),
藉此避開格式判斷,那其他用戶在網頁上瀏覽這張圖片時
會有什麼影響?

剛剛試了一下,圖片可以正常顯示,就是檔案變大(因為合併了exe檔),
除此之外,會有哪些安全性的顧慮?




本篇文章回覆於2007-08-02 12:15
13樓
最有價值解答

Jerry Lai
初級顧問
19942 17
7554 3311

檢舉此回應
除了之前GDI+的JPEG漏洞以外
目前好像還沒有其他因圖檔所造成的災情

檔案合併這個情形暫時可以不管
因為如果可以hack到你的web去進行檔案合併
那就不光是檔案上傳這種小問題了(除非你的程式還有其他漏洞可以讓人作檔案合併)
而如果是user下載回去之後才被合併的情形機率更低
而且合併的問題有辦法可以避免

個人是建議可以先用前幾byte來判斷
過了這關之後判斷檔案大小會不會太離譜
完了之後讀進記憶體再轉存
這樣隱藏在檔案後端的部份就會被剔除
也就不用擔心偽圖檔的問題了


本篇文章回覆於2007-08-03 02:13
14樓
回應

小毅
高級專家
6276 2
2042 706
捐贈 VP 給 小毅 檢舉此回應
感謝Jerry解答∼


本篇文章回覆於2007-08-03 07:48
15樓
作者回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
Jerry,
您的意思,是自己先new image物件,將使用者上傳的圖讀進來,將image存成圖片,自然就會過濾掉附加的檔案了,是嗎


本篇文章回覆於2007-08-03 09:22
=========================================
網站 : http://www.allenkuo.com/
[變換順序]
 

回覆
如要回應,請先登入.