「我們以為調了殺毒接口就安全了,結果病毒文件大搖大擺穿了過去。」一位后端工程師的吐槽,揭開了Node.js生態里一個沉默的漏洞。
坑在哪:流式傳輸的盲區
![]()
ClamAV是開源殺毒的事實標準,Node.js開發者常用clamdjs這類封裝庫。問題出在大多數人直接傳文件路徑——ClamAV掃描的是本地磁盤文件,但現代應用多是流式上傳:用戶傳文件→內存緩存→轉存云端。路徑傳過去,掃的是臨時文件或空句柄,真正的病毒 payload 早溜了。
![]()
為什么普遍中招
官方示例代碼就是坑。npm下載量最高的幾個ClamAV庫,README里的demo清一色是fs.readFileSync + 傳路徑。開發者復制粘貼,上線即埋雷。更諷刺的是,單元測試能過——因為測試用的就是本地文件,和生產環境完全兩碼事。
正確姿勢是什么
![]()
必須用流式掃描接口。ClamAV協議支持INSTREAM指令,直接把內存中的文件流傳過去,不落地磁盤。但這對庫的封裝要求更高,需要手動處理TCP分片和響應解析,多數開發者嫌麻煩,或者根本不知道這個選項存在。
這個bug的殘酷在于:安全功能看起來正常運行,日志里甚至有"掃描完成"的記錄,實際上什么都沒掃到。直到某天生產環境爆出木馬,復盤時才發現接口返回的永遠是"clean"。
Node.js生態的便利是把雙刃劍——封裝越徹底,底層細節越容易被忽略。當"能跑就行"成為默認心態,安全就成了薛定諤的貓。你的文件上傳接口,真的掃了嗎?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.