Asp-Classic
找出真正的文件類型
我正在處理一個處理文件上傳的 ASP 網頁。僅允許上傳特定類型的文件,例如 .XLS、.XML、.CSV、.TXT、.PDF、.PPT 等。
我必須確定一個文件是否真的與副檔名顯示的類型相同。換句話說,如果將trojan.exe重命名為harmless.pdf並上傳,應用程序必須能夠發現上傳的文件不是.PDF 文件。
您將使用什麼技術來分析這些上傳的文件?我在哪裡可以獲得有關這些文件格式的最佳資訊?
一種方法是檢查文件中的某些簽名或幻數。此頁面有一個方便的已知文件簽名列表,並且似乎是最新的:
換句話說,如果將 trojan.exe 重命名為harmless.pdf 並上傳,應用程序必須能夠發現上傳的文件不是.PDF 文件。
這不是一個真正的問題。如果 .exe 以 .pdf 格式上傳,並且您正確地將其作為 application/pdf 提供給下載器,則下載器將得到的所有內容都將是損壞的 PDF。他們必須手動將其重新鍵入 .exe 才能受到傷害。
真正的問題是:
- 某些瀏覽器可能會嗅探文件的內容,並認為它們比您更了解文件的類型。IE 在這方面特別糟糕,如果它發現任何 HTML 標記潛伏在文件開頭附近,則傾向於將文件呈現為 HTML。這特別無益,因為這意味著腳本可以注入您的站點,可能會損害任何應用程序級別的安全性(cookie 竊取等)。解決方法包括始終使用 Content-Disposition 將文件作為附件提供,和/或從不同的主機名提供文件,因此它不能跨站點腳本回到您的主站點。
- PDF 文件無論如何都不安全!它們可能充滿了腳本,並且存在嚴重的安全漏洞。利用 PDF 閱讀器瀏覽器外掛中的漏洞是目前在網路上安裝木馬的最常見手段之一。而且您通常幾乎無能為力來嘗試檢測這些漏洞,因為它們可能會被高度混淆。