การแนะนำ
Npm มีเครื่องมือที่เรียกว่า: การตรวจสอบ npm ซึ่งจะรายงานว่าแพ็คเกจหรือไลบรารีของคุณมีช่องโหว่ที่ทราบหรือไม่ นี่เป็นความคิดริเริ่มที่ยอดเยี่ยมจากเวลา 15.00 น.
นี่เป็นภัยคุกคามด้านความปลอดภัยที่ยอดเยี่ยมซึ่งแอปพลิเคชันของคุณอาจถูกแฮ็กหรือมีความเสี่ยงหากแอปพลิเคชันของคุณใช้ไลบรารีของบุคคลที่สามซึ่งมีช่องโหว่ที่ทราบอยู่แล้ว แม้ว่าแอปของคุณจะไม่มีปัญหาด้านความปลอดภัย แต่ทั้งระบบของคุณก็ยังมีความเสี่ยงเนื่องจากไลบรารีของบุคคลที่สามนั้น มันเป็นหนึ่งในภัยคุกคาม Owasp Security 10 อันดับแรก
ในโพสต์นี้เราจะเห็นสิ่งต่อไปนี้:
- วิธีใช้งานผ่านส่วนที่เหลือ API
- คุณไม่จำเป็นต้องติดตั้งแพ็คเกจก่อนใช้การตรวจสอบ npm
- ไม่จำเป็นต้องรันคำสั่ง npm audit
- ตรวจสอบข้อมูลช่องโหว่เกี่ยวกับแพ็คเกจ npm โดยไม่ต้องติดตั้ง
การตรวจสอบ npm ทำงานอย่างไรภายใน
ต้องใช้ไฟล์ package.json และ packagege-lock.json ของคุณ โดยจะอ่านข้อมูลเมตาบางส่วนจากไฟล์เหล่านี้และส่งไปยังเว็บเซิร์ฟเวอร์ผ่าน API ที่เหลือ เว็บเซิร์ฟเวอร์จะตอบกลับและระบุว่าไลบรารีใดมีข้อมูลที่มีช่องโหว่อยู่ในนั้นหรือไม่
ดังนั้นเมื่อคุณรันการตรวจสอบ npm บนโฮมไดเร็กตอรี่ของโปรเจ็กต์ของคุณ เตรียมข้อมูลบางส่วนและส่งไปยังเว็บเซิร์ฟเวอร์
การตรวจสอบ npm ใช้โมดูล: npm-registry-fetch ซึ่งเปิดเผยวิธีการบางอย่างในการเรียก API ที่เหลือเหล่านั้น แม้ว่าคุณจะไม่พบเอกสารประกอบเลยก็ตาม ฉันเพิ่งพบมันในขณะที่ดูรหัส GitHub ของ npm
Rest API สำหรับรับข้อมูลการตรวจสอบ npm
URL: /-/npm/v1/security/audits
Host: registry.npmjs.org
Port: 443
HttpMethod: POST
มีเนื้อหาโพสต์ซึ่งมีลักษณะดังนี้:
{
"name": "npm_audit_test",
"version": "1.0.0",
"requires": {
"marked": "^0.6.3"
},
"dependencies": {
"marked": {
"version": "0.6.3",
"integrity": "sha1-ebq614r2OLpNUiqecVzf3SQp6UY=234"
}
}
}
ดังนั้น สิ่งที่ดีคือคุณไม่จำเป็นต้องมีไฟล์ package.json หรือ package-lock.json คุณสามารถเรียก API นี้และรับผลลัพธ์ได้ คุณสามารถดูด้านบนได้ว่ากำลังส่งแฮช: integrity ในส่วนเนื้อหา POST แต่คุณสามารถลบออกได้เช่นกัน
มาดูโค้ดที่ใช้งานได้เต็มรูปแบบกัน
รหัสเพื่อดึงข้อมูลการตรวจสอบ
ที่นี่ ฉันได้ใช้ชื่อที่ไม่มีอยู่: npm_audit_test และเวอร์ชันใดๆ ของโปรเจ็กต์ของฉัน มันสามารถเป็นอะไรก็ได้ และฉันกำลังใช้แพ็คเกจการพึ่งพา: ทำเครื่องหมายไว้
const regFetch = require('npm-registry-fetch');
const auditData = { "name": "npm_audit_test", "version": "1.0.0", "requires": { "marked": "^0.6.3" }, "dependencies": { "marked": { "version": "0.6.3", "integrity": "sha1-ebq614r2OLpNUiqecVzf3SQp6UY=234" } } };
let opts = { "color":true, "json":true, "unicode":true, method: 'POST', gzip: true, body: auditData };
return regFetch('/-/npm/v1/security/audits', opts) .then(res => { return res.json(); }) .then(res => { console.log(JSON.stringify(res, "", 3)); }).catch(err => console.error(err));
ดังนั้น โซลูชันที่นำเสนอข้างต้นไม่จำเป็นต้องให้คุณติดตั้งแพ็คเกจของคุณ คุณสามารถส่งชื่อแพ็คเกจใดก็ได้และคุณทำเสร็จแล้ว
ในตัวอย่างข้างต้น ฉันสามารถลบแอตทริบิวต์ integrity ได้อย่างสมบูรณ์ และจะยังคงใช้งานได้
โพสต์ครั้งแรกที่: https://www.gyanblog.com/gyan/how-node-npm-audit-rest-api-vulnerability/
แสดงความคิดเห็นของคุณหากคุณมีคำถามใด ๆ