最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Node.js文件上傳中集成ClamAV掃描的詳細步驟

 更新時間:2026年04月27日 08:24:02   作者:SonoTommy  
本文介紹了在Node.js文件上傳中集成ClamAV掃描的具體步驟,包括安裝、使用、Express集成和遠程掃描等,該庫在文件落盤前完成掃描,返回類型化的verdictsymbol,不依賴第三方運行時,需要的朋友可以參考下

文件上傳是常見的攻擊面。用戶上傳的文件可能包含惡意軟件、ZIP 炸彈或 偽造的 MIME 類型。大多數(shù) Node.js 項目只做擴展名檢查,這遠遠不夠。

pompelmi 是一個 Node.js 庫,在文件落盤之前完成掃描,返回類型化的 verdict symbol,不依賴任何第三方運行時。

工作原理

  1. 驗證參數(shù)是否為字符串,文件是否存在
  2. 通過 child_process 調用 clamscan,讀取退出碼
  3. 將退出碼映射為 Symbol

沒有 stdout 解析,沒有正則,沒有隱式狀態(tài)。

安裝

需要 Node.js 和 ClamAV。

npm install pompelmi

安裝 ClamAV:

# macOS
brew install clamav && freshclam
# Debian / Ubuntu
sudo apt-get install -y clamav clamav-daemon && sudo freshclam
# Windows
choco install clamav -y

基本用法

const { scan, Verdict } = require('pompelmi');

const result = await scan('/path/to/file.zip');

switch (result) {
  case Verdict.Clean:
    // 文件安全,繼續(xù)處理
    break;
  case Verdict.Malicious:
    throw new Error('檢測到惡意軟件,文件已拒絕');
  case Verdict.ScanError:
    // 掃描未完成,按不可信文件處理
    console.warn('掃描失敗,拒絕文件');
    break;
}

返回值:

結果ClamAV 退出碼含義
Verdict.Clean0未發(fā)現(xiàn)威脅
Verdict.Malicious1匹配到已知病毒簽名
Verdict.ScanError2掃描本身失敗,文件狀態(tài)未知

在 Express 中集成

const express = require('express');
const multer  = require('multer');
const { scan, Verdict } = require('pompelmi');
const path = require('path');
const fs   = require('fs');

const app    = express();
const upload = multer({ dest: 'tmp/' });

app.post('/upload', upload.single('file'), async (req, res) => {
  const filePath = path.resolve(req.file.path);

  try {
    const result = await scan(filePath);

    if (result === Verdict.Malicious) {
      fs.unlinkSync(filePath);
      return res.status(422).json({ error: '文件包含惡意軟件' });
    }

    if (result === Verdict.ScanError) {
      fs.unlinkSync(filePath);
      return res.status(422).json({ error: '掃描失敗,文件已拒絕' });
    }

    // Verdict.Clean — 繼續(xù)保存文件
    return res.status(200).json({ verdict: 'clean' });

  } catch (err) {
    fs.unlinkSync(filePath);
    return res.status(500).json({ error: err.message });
  }
});

遠程掃描(Docker)

如果 ClamAV 運行在容器中,通過 TCP socket 連接:

const result = await scan('/path/to/file.zip', {
  host: '127.0.0.1',
  port: 3310,
});

API 保持不變,verdict 類型不變。

錯誤處理

try {
  const result = await scan(path.resolve(filePath));
  return result;
} catch (err) {
  // filePath 不是字符串      → 'filePath must be a string'
  // 文件不存在               → 'File not found: <path>'
  // clamscan 不在 PATH 中    → ENOENT
  // 未知退出碼               → 'Unexpected exit code: N'
  console.error('掃描異常:', err.message);
  return null;
}

特性

  • 零運行時依賴,僅使用 Node.js 內置 child_process
  • 不解析 stdout,直接讀取退出碼
  • 支持 TypeScript,verdict 為 Symbol 類型,防止拼寫錯誤
  • 支持本地 clamscan 和遠程 clamd TCP socket
  • 跨平臺:macOS、Linux、Windows

以上就是在Node.js文件上傳中集成ClamAV掃描的詳細步驟的詳細內容,更多關于Node.js文件上傳中集成ClamAV掃描的資料請關注腳本之家其它相關文章!

相關文章

  • node.js學習之base64編碼解碼

    node.js學習之base64編碼解碼

    開發(fā)者對Base64編碼肯定很熟悉,是否對它有很清晰的認識就不一定了。實際上Base64已經(jīng)簡單到不能再簡單了,這篇文章給大家通過示例代碼介紹了node.js對字符串和圖片base64編碼解碼的方法,有需要的朋友們可以通過本文來進行學習,下面來一起看看吧。
    2016-10-10
  • node實現(xiàn)shell命令管理工具及commander.js學習

    node實現(xiàn)shell命令管理工具及commander.js學習

    這篇文章主要為大家介紹了node實現(xiàn)shell命令管理工具及commander.js學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 如何使用axios庫在Node.js中進行代理請求(實踐案例)

    如何使用axios庫在Node.js中進行代理請求(實踐案例)

    axios是一個強大的基于Promise的HTTP客戶端,它在瀏覽器和Node.js環(huán)境中均可使用,本文將介紹如何充分利用axios庫,在Node.js中進行代理請求的最佳實踐,并通過一個實際案例來展示其應用,感興趣的朋友一起看看吧
    2024-03-03
  • 基于Koa2寫個腳手架模擬接口服務的方法

    基于Koa2寫個腳手架模擬接口服務的方法

    這篇文章主要介紹了基于Koa2寫個腳手架模擬接口服務的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 安裝node-sass的方法步驟

    安裝node-sass的方法步驟

    本文主要介紹了安裝node-sass的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解

    nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解

    這篇文章主要介紹了nodejs連接mysql數(shù)據(jù)庫,結合實例形式總結分析了nodejs連接與操作mysql數(shù)據(jù)庫的相關模板、配置及mysql數(shù)據(jù)庫查詢、添加數(shù)據(jù)等操作技巧,需要的朋友可以參考下
    2018-03-03
  • 詳解nodejs 文本操作模塊-fs模塊(二)

    詳解nodejs 文本操作模塊-fs模塊(二)

    這篇文章主要介紹了詳解nodejs 文本操作模塊-fs模塊(二),主要包括文件的讀寫操作,有興趣的可以了解一下。
    2016-12-12
  • Node.js腳本提取OPML文件信息實現(xiàn)示例詳解

    Node.js腳本提取OPML文件信息實現(xiàn)示例詳解

    這篇文章主要為大家介紹了Node.js腳本提取OPML文件信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • nw.js實現(xiàn)類似微信的聊天軟件

    nw.js實現(xiàn)類似微信的聊天軟件

    本文給大家介紹的是使用nw.js實現(xiàn)類似微信的聊天軟件,還處于測試階段,功能非常少,大家一起來添磚加瓦吧。
    2015-03-03
  • nodejs版本管理工具nvm的安裝與使用小結

    nodejs版本管理工具nvm的安裝與使用小結

    在項目開發(fā)過程中,使用到vue框架技術,需要安裝node下載項目依賴,本文主要介紹了nodejs版本管理工具nvm的安裝與使用小結,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

夏河县| 瑞丽市| 滨海县| 来宾市| 保德县| 盘山县| 德清县| 寿光市| 海安县| 柏乡县| 哈巴河县| 镇安县| 勐海县| 军事| 祁连县| 万安县| 岑溪市| 奎屯市| 江安县| 渝中区| 浦北县| 读书| 宜黄县| 吉木乃县| 潍坊市| 城步| 汾西县| 新化县| 揭东县| 金塔县| 宝清县| 页游| 宜章县| 玉屏| 图们市| 宁安市| 长岛县| 瑞安市| 敖汉旗| 黄骅市| 台东县|