2015-11-20 75 views
2

現在我已經閱讀了一堆關於如何檢查PHP上傳是否安全的病毒主題以及從中得到的要點是:我無法100%保證上傳文件不會充滿病毒 - 無論擴展名如何。一種建議的解決方案是在上傳過程中刪除擴展名,然後在人們想要下載時重新組合。查看/下載PHP上傳 - 如何做到病毒安全?

但是,我想讓用戶直接在網站上查看文件。我該如何去做呢?例如,生成一個帶有上傳PDF的iframe - 是安全的還是像執行它一樣會給潛在的病毒帶來傳播的機會?有了DOC,我想使用Google文檔,所以我嵌入了Google文檔的iframe,它可以在我的服務器上獲得DOC的URL。那麼安全嗎?

或者除了只允許下載以防止潛在病毒在服務器上傳播之外,是否沒有其他方法?如果是這樣,重新組裝的過程如何?我猜,當有人上傳test.exe時,我會刪除.exe部分,但存儲在數據庫中。然後,當有人請求下載時,我將測試文件重命名爲test.exe並推送下載。之後,我將它重新命名爲測試。那是對的嗎?

另外:像Trello這樣的服務如何做到這一點?當我上傳一個圖像文件時,它會直接顯示 - 通過病毒掃描或其他方式沒有明顯的延遲。我想過使用virustotal.com API,但這肯定需要很長時間,不是嗎?如果讓人們上傳,然後公開展示它們,直到virustotal.com-掃描完成,然後考慮文件安全嗎?

感謝和歡呼的所有幫助和抱歉,如果我錯過了什麼。

+0

瞭解一件事... *文件擴展名與任何事情沒有任何關係*除此之外,「清理」病毒文件的唯一方法是通過某種病毒掃描程序運行它。如果掃描儀發現某些內容,請拒絕該文件。如果你允許用戶在你的服務器上保存文件,那麼這些文件可以包含*任何*。除非您以任何方式檢查或修改這些文件,否則用戶將正確下載上傳的內容。 – David

+0

沒有。你不重命名文件,句點。他們在服務器上。他們不會傷害用戶。您可以告訴客戶端下載文件時的任何名稱,例如'header('Content-disposition:attachment; filename =「cutekittens_with_virus.exe」); readfile('totally_different_filename');' –

+0

嗯,我完全混淆了這裏的東西。你是正確的 - 重命名是一種建議的解決方案,以防止文件在服務器上執行,但它不會讓用戶感到病毒的痛苦。所以總結一下:我讓他們上傳,我不重新命名,然後我不會公開展示任何東西,直到virustotal.com告訴我我很好 - 如果不是,我立即刪除文件(s) 。這些文件在隨機命名的文件夾中登陸,所以用戶不應該能夠自己找到它們 - 我可以安全地假設只要文件沒有被執行,我的服務器就不會被注入。 – Leomuck

回答

0

有我在實踐中,多年來見過幾個方法:

  1. 只需在本地,使用例如ClamAV的。
    • Pro:如果您的病毒檢測結果是最新的,那麼您會以這種方式捕獲任何已知的病毒。騙局:反病毒軟件是一個攻擊面。查看來自Google Project Zero的Tavis Ormandy的許多調查結果。
    • Con:可能會對服務器資源徵稅。 (可能需要啓動一個專門用於AV目的的不同服務器?)
  2. 使用API​​,例如VirusTotal。
    • 專業:攻擊面少。你需要與VirusTotal共享這個文件,如果你讓用戶上傳的文件特別敏感(即受保護的健康信息),這可能是一個壞主意。

我不知道該建議,因爲我不知道你的威脅模型或運作上的限制。

然而,不服務瀏覽器攻擊(例如XSS)或服務器上允許反向彈更一般的問題實際上是somewhat easy,但並不是微不足道的。