Perkenalan

Npm memiliki alat bernama: npm audit yang melaporkan apakah paket atau pustaka Anda diketahui memiliki kerentanan atau tidak. Ini adalah inisiatif luar biasa dari npm.

Ini adalah ancaman keamanan besar di mana aplikasi Anda dapat diretas atau rentan jika aplikasi Anda menggunakan perpustakaan pihak ketiga yang diketahui memiliki kerentanan. Meskipun aplikasi Anda tidak mengalami masalah keamanan, namun seluruh sistem Anda rentan karena perpustakaan pihak ketiga tersebut. Ini adalah salah satu dari 10 ancaman Keamanan Owasp teratas.

Dalam posting ini, kita akan melihat yang berikut:

  • Cara menggunakannya melalui rest API
  • Anda tidak perlu menginstal paket sebelum menggunakan npm audit
  • tidak perlu menjalankan perintah npm audit
  • periksa informasi kerentanan tentang paket npm apa pun tanpa menginstalnya

Bagaimana audit npm bekerja secara internal

Ini memerlukan file package.json dan packege-lock.json Anda. Ia membaca beberapa informasi meta dari file-file ini dan mengirimkannya ke server web mereka melalui API lainnya. Server web kemudian mengembalikan respons dan menunjukkan apakah ada perpustakaan yang memiliki informasi rentan di dalamnya atau tidak.

Jadi ketika Anda menjalankan npm audit di direktori home proyek Anda. Ia menyiapkan beberapa data, dan mengirimkannya ke server webnya.

npm audit menggunakan modul: npm-registry-fetch ​​yang memperlihatkan beberapa metode untuk memanggil rest api tersebut. Meskipun demikian, Anda tidak akan menemukan dokumentasinya di mana pun. Saya baru menemukannya sambil melihat kode GitHub npm.

Istirahatkan API untuk mendapatkan informasi audit npm

URL: /-/npm/v1/security/audits
Host: registry.npmjs.org
Port: 443
HttpMethod: POST

Ini memiliki badan posting yang terlihat seperti:

{
    "name": "npm_audit_test",
    "version": "1.0.0",
    "requires": {
        "marked": "^0.6.3"
    },
    "dependencies": {
        "marked": {
            "version": "0.6.3",
            "integrity": "sha1-ebq614r2OLpNUiqecVzf3SQp6UY=234"
        }
    }
}

Jadi, hal baiknya adalah Anda tidak perlu memiliki file package.json atau package-lock.json. Anda cukup memanggil api ini, dan mendapatkan hasilnya. Anda dapat melihat di atas bahwa ia mengirimkan beberapa hash: integritas di isi POST, namun Anda juga dapat menghapusnya.

Mari kita lihat kode yang berfungsi penuh.

Kode untuk Mengambil data Audit

Di sini, saya menggunakan nama yang tidak ada: npm_audit_test, dan versi apa pun dari proyek saya. Itu bisa berupa apa saja. Dan, saya menggunakan paket ketergantungan: ditandai

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));

Jadi, solusi yang disajikan di atas tidak mengharuskan Anda menginstal paket Anda. Anda cukup memberikan nama paket apa pun dan selesai.

Dalam contoh di atas, saya dapat menyelesaikan penghapusan atribut integrity, dan atribut tersebut akan tetap berfungsi.

Awalnya diposting di: https://www.gyanblog.com/gyan/how-node-npm-audit-rest-api-vulnerability/

Berikan komentar anda, jika ada pertanyaan.