HomeO mnie

O pewnym dwukropku i milionowych pobraniach biblioteki, która nie istnieje. 🤷‍♂️

By Robert Duraj
Published in Node.js
June 25, 2024
1 min read
O pewnym dwukropku i milionowych pobraniach biblioteki, która nie istnieje. 🤷‍♂️

Ponad milion pobrań tygodniowo ma na dzień dzisiejszy opublikowana 8 lat temu biblioteka, która jest… pusta. Jak to możliwe?! Rozwiązanie zagadki tkwi w jej nazwie: fs. Brzmi znajomo? Oczywiście! To jedna z core’owych bibliotek Node.js. Problem w tym, że prawilny fs jest wbudowany w core i nie ma potrzeby go instalować z npm. Statystyki pobrań, jak i sam koncept złośliwego kodu wstrzykiwanego w ten sposób są bardzo niepokojące.

Tak samo pomyślał core team Node.js.

W związku z zagrożeniem takimi właśnie pomyłkami wprowadził on notację dotyczącą bibliotek standardowych. Od wersji 18 możemy spotkać się z zapisem node:fs, który wskazuje bezpośrednio na bibliotekę z wachlarza tych core’owych i pomija instalowane ręcznie rozwiązania.

Wspaniale! Czyli jesteśmy całkiem bezpieczni? Nie do końca.

Wciąż wisi nad nami kilka niebezpieczeństw, o których warto pamiętać. Przede wszystkim zasada “prefix-only” dotyczy tylko nowych paczek, takich jak node:test. Starsze rozwiązania (fs, http, etc.) musiały zachować kompatybilność wsteczną i dostępne są pod dwiema nazwami: fs oraz node:fs. Drugi zapis daje pewność załadowania biblioteki z core, a nie z userlandu, ale wciąż o pomyłkę nie jest trudno. Szczególnie biorąc pod uwagę, że zamieszanie z nazewnictwem wydaje się być spore. Tylko czekać na wysyp ciekawych wariacji bibliotek z literówkami (vide: typosquatting).

Oczywiście, żeby atak się powiódł, musielibyśmy je jeszcze zainstalować. Odruch pt. “nie znalazł biblioteki, więc szybko ją doinstaluję z IDE (zamiast poprawić literówkę)” może być wyjątkowo zwodniczy w tym wypadku 😉.

Podsumowując:

  • Korzystając z bibliotek core’owych, korzystajmy z notacji node:lib.
  • Jeżeli nie mamy pewności, czy coś znajduje się w podstawowym zestawie Node.js, łatwo to sprawdzić np. w konsoli Node za pomocą komendy: require('node:module').builtinModules.
  • Zanim zainstalujemy bibliotekę, sprawdźmy w dokumentacji, pod jaką nazwą występuje w katalogu npm.

Może nam to oszczędzić sporo nerwów 😉.


Tags

#nodejs#javascript

Share

Previous Article
console.log nie taki zły!

Robert Duraj

Software Engineer

Related Posts

Node.js... A na co to komu?!
July 24, 2024
1 min
© 2024, All Rights Reserved.
Powered By

Social Media

linkedingithubtwitter