Baca dalam bahasa Inggris

Bagikan melalui


Informasi kerentanan

Klien NuGet, mulai dari versi 6.7, dapat mengunduh informasi kerentanan paket yang diketahui untuk digunakan dalam skenario seperti memeriksa paket selama operasi pemulihan. Meskipun sumber daya metadata paket juga berisi informasi kerentanan yang diketahui, jika aplikasi perlu memeriksa sejumlah besar paket untuk kerentanan yang diketahui, jauh lebih cepat untuk mengunduh file kerentanan dan pencarian yang diketahui secara lokal, daripada membuat sejumlah besar permintaan HTTP. Misalnya, ini memungkinkan Pemulihan NuGet untuk dengan cepat memeriksa paket yang dipulihkan untuk kerentanan yang diketahui, yang secara historis tidak pernah mengunduh detail paket dari sumber daya metadata paket.

API terdiri dari setidaknya dua file, indeks kerentanan dan satu atau beberapa file halaman kerentanan. Data kerentanan yang diketahui dapat dipartisi ke dalam beberapa file, dan indeks kerentanan memberi klien informasi yang diperlukan untuk menyimpan file, dan memperbarui cache, secara efisien.

Sumber daya yang digunakan untuk membangun URL ini adalah sumber daya yang VulnerabilityInfoditemukan dalam indeks layanan.

Strategi partisi yang disarankan

Halaman yang tercantum dalam indeks kerentanan idealnya harus dioptimalkan untuk memaksimalkan penembolokan, dan karenanya meminimalkan pembaruan ke file besar. Ini akan memungkinkan klien untuk meminimalkan frekuensi yang diperlukan untuk mengunduh pembaruan.

Strategi yang disarankan untuk pemartisian data kerentanan adalah memiliki dua halaman, base.json dan updates.json. File base.json diperbarui secara berkala (misalnya sebulan sekali), dan berisi semua kerentanan yang diketahui pada saat file diregenerasi. File updates.json harus berisi saran baru yang diterbitkan sejak base.json terakhir kali diregenerasi. Ini akan memungkinkan klien untuk jarang mengunduh besar base.json , sementara file yang sering berubah updates.json selalu relatif kecil.

Klien NuGet menggabungkan data dari beberapa file secara aditif, dan dapat memuat file dalam urutan apa pun. Skema file data tidak memungkinkan modifikasi atau redaksi kerentanan yang diketahui dari file lain. Oleh karena itu jika sumber data kerentanan server (misalnya Database Penasihat GitHub) memodifikasi saran yang ada, server NuGet harus memodifikasi halaman yang sebelumnya dilaporkan informasi kerentanan. Salah satu cara untuk mencapainya dengan skema partisi yang disarankan adalah dengan memperlakukan semua modifikasi dan penghapusan kerentanan sebagai pemicu untuk meregenerasi file lengkap base.json , dan kosong updates.json.

Penerapan versi

Nilai berikut @type digunakan:

@type nilai Catatan
KerentananInfo/6.7.0 Rilis awal

Indeks kerentanan

Indeks kerentanan adalah array objek JSON dengan properti berikut:

Nama Tipe Diperlukan Catatan
@name string yes Nama pendek untuk file, digunakan sebagai kunci cache.
@id string yes URL lengkap (absolut) ke file data kerentanan.
@updated string yes String ISO 8601 yang mewakili tanggal dan waktu file terakhir diperbarui, idealnya dengan zona waktu UTC.
komentar string no String deskriptif opsional.

Pembatasan berikut berlaku:

  • Indeks harus berupa array objek dengan antara 1 dan 16 item. Jika server tidak memiliki data kerentanan (nol halaman), maka harus menghapus VulnerabilityInfo sumber daya dari ServiceIndex.
  • @nameharus unik dalam indeks, harus panjangnya antara 1 dan 32 karakter, dan hanya dapat menggunakan karakter A untuk , ke z, 0a ke 9, -, atau _Z.
  • @id harus berupa URL absolut, bukan URL relatif.

Halaman kerentanan

File halaman kerentanan adalah objek JSON yang digunakan sebagai kamus. Kunci properti adalah id paket huruf kecil dan nilai properti adalah array dari objek berikut dengan properti berikut:

Nama Tipe Diperlukan Catatan
keparahan Integer yes 0 berarti rendah, 1 berarti sedang, 2 berarti tinggi, 3 berarti kritis.
url string yes URL tempat pengguna bisa mendapatkan informasi selengkapnya tentang kerentanan.
versi string yes Rentang versi yang rentan, menggunakan sintaks rentang versi NuGet.

ID paket (kunci objek akar) harus di-lowercas dengan String.ToLowerInvariant.

Daftar kerentanan yang diketahui untuk paket harus diurutkan dalam urutan turun dari versi maksimum rentang versi, diikuti dengan versi turun dari versi min, diikuti oleh urutan naik URL. Rentang dengan versi null min atau maks (tidak terbatas) dalam rentang versi harus diurutkan sebelum versi non-null (terikat).

Halaman kosong, yang tidak memberikan kerentanan yang diketahui, harus berupa array JSON kosong ([]).

Sampel

Berikut adalah sampel indeks kerentanan:

[
    {
        "@name": "base",
        "@id": "https://nuget.contoso.com/v3/vulnerabilities/3bb6b300-2f74-45bc-af06-746fd21c024b.json",
        "@updated": "2023-06-01T06:14:58.4159909Z",
        "comment": "The base data for vulnerability update periodically"
    },
    {
        "@name": "update",
        "@id": "https://nuget.contoso.com/v3/vulnerabilities/ffd572cd-33f3-4372-8714-a9cab2e86b45.json",
        "@updated": "2023-06-14T11:35:30.3155764Z",
        "comment": "The patch data for the vulnerability. Contains all the vulnerabilities since base was last updated."
    }
]

Berikut adalah sampel file data kerentanan:

{
    "contoso.library": [
        {
            "url": "https://cve.contoso.com/advisories/1",
            "severity": 1,
            "versions": "(, 2.0.0)"
        },
        {
            "url": "https://cve.contoso.com/advisories/2",
            "severity": 2,
            "versions": "(1.0.0, 2.0.0)"
        }
    ],
    "contoso.utilities": [
        {
            "url": "https://cve.contoso.com/advisories/3",
            "severity": 3,
            "versions": "(, 1.0.0)"
        }
    ]
}