การแนะนำ

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/

แสดงความคิดเห็นของคุณหากคุณมีคำถามใด ๆ