Eksperimento sa paggawa ng isang NPM package na nakadepende sa lahat ng package sa repository

Ang isa sa mga developer ng JavaScript package ay nag-eksperimento sa paglikha at paglalagay sa NPM repository ng package na "lahat", na sumasaklaw sa lahat ng umiiral na package sa repository na may mga dependency. Para ipatupad ang feature na ito, ang package na "everything" ay may direktang dependencies na may limang "@everything-registry/chunk-N" na pakete, na may mga dependency naman sa higit sa 3000 "sub-chunk-N" na package, na ang bawat isa ay nagbubuklod sa 800 umiiral na mga pakete sa repositoryo.

Ang paglalagay ng "lahat" sa NPM ay nagkaroon ng dalawang kawili-wiling epekto. Una, ang package na "lahat ng bagay" ay naging isang uri ng tool para sa pagsasagawa ng mga pag-atake ng DoS, dahil ang pagtatangkang i-install ito ay humahantong sa pag-download ng milyun-milyong package na naka-host sa NPM at nauubos ang magagamit na espasyo sa disk o huminto sa pagpapatupad ng mga proseso ng build. Ayon sa mga istatistika ng NPM, ang package ay na-download nang humigit-kumulang 250 beses, ngunit walang sinuman ang nag-abala na idagdag ito bilang isang dependency sa isa pang package pagkatapos na ma-hack ang account ng developer upang makagawa ng sabotahe. Bilang karagdagan, ang ilang mga serbisyo at tool na sumusubaybay at sumusuri sa mga bagong package na hino-host ng NPM ay hindi sinasadyang nalantad sa pag-atake.

Pangalawa, ang pag-publish ng package na "lahat ng bagay" ay epektibong na-block ang kakayahang mag-alis ng anumang mga pakete sa NPM na napunta sa listahan ng mga dependency nito. Ang isang pakete mula sa NPM ay maaaring alisin ng may-akda lamang kung hindi pa ito ginagamit sa mga dependency ng iba pang mga pakete, ngunit pagkatapos ng paglalathala ng "lahat" ang mga dependency ay naging sakop ang lahat ng mga pakete sa repositoryo. Kapansin-pansin na ang pag-alis ng "lahat" na pakete mismo ay na-block din, mula noong 9 na taon na ang nakaraan isang test package na "everything-else" ay nai-post sa repositoryo, na kasama ang string na "lahat ng bagay" sa listahan ng mga dependencies. Kaya, pagkatapos ng paglalathala, ang "lahat" na pakete ay nakadepende sa isa pang pakete.

Pinagmulan: opennet.ru

Magdagdag ng komento