Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Keeping JavaScript safe
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
C J Silverio
October 04, 2017
Programming
500
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Keeping JavaScript safe
Security & the npm registry. Presented at Node Interactive 2017 in Vancouver.
C J Silverio
October 04, 2017
More Decks by C J Silverio
See All by C J Silverio
The economics of package management
ceejbot
4
1.6k
The future of (javascript) modules (in node)
ceejbot
1
340
ceej's how to solve it
ceejbot
6
790
work-life balance at npm
ceejbot
5
810
hash functions and you!
ceejbot
2
390
The accidental noder
ceejbot
2
180
Design Patterns & Modularity in the npm Registry
ceejbot
3
220
Monitoring on a budget
ceejbot
2
310
Cheating Gall's Law: MediterraneaJS edition
ceejbot
4
360
Other Decks in Programming
See All in Programming
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
320
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
910
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
140
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
260
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
140
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
300
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
37k
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
490
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
130
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
230
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
Exploring anti-patterns in Rails
aemeredith
3
500
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
270
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Site-Speed That Sticks
csswizardry
13
1.5k
Transcript
keeping javascript safe
keeping javascript safe security & the npm registry
C J Silverio CTO @ npm, @ceejbot
using node since 2011 node has grown up!
running npm's registry since 2014 npm has grown up too!
the story of the npm registry mirrors the story of
node
npm is infrastructure for millions of developers
npm dependably serves node packages 24/7 around the world
Fortune 100 companies depend on npm & node
3 billion downloads/week 9 million users 156K package authors (1.7%)
npm has as many users as the New York City
it didn't start that way
in 2009, node & npm's users knew each other by
name
the npm registry is now too large to depend on
community policing
but you need that policing
you rely on the packages you install
questions you ask 1. Is the registry secure? 2. Does
this package have vulnerabilities? 3. Is this package malware? 4. Who published this package?
1. Is the registry secure?
What does secure mean? registry systems can't be broken into
data can't be tampered with
we don't try to do this alone ongoing contract with
^Li!
this guy, Adam Baldwin (he'll come up again) & his
colleagues
periodic pen testing ongoing code reviews
good security practices are on-going work
2. Does this package have vulnerabilities?
our friends at ^Li! again as the Node Security Platform
NSP reviews popular packages, reports vulnerabilities, & handles reports
h!ps://nodesecurity.io
early access NSP data is integrated into npm enterprise
newsflash! npm is a company that sells services!
npm enterprise is a registry inside your firewall
NSP keeps us informed we keep them informed in turn
3. Is this package malware?
malware doesn't advertise
malware comes in flavors: spam & poison
spammers found the registry in 2016
two kinds of spam: spam content & js spam support
npm + cdns built on top == trivial hosting for
GA clickjacking
now using machine learning to catch spam thanks to the
Smyte service
spam speedbumps: validated email to publish disallow throwaway addresses
we seem to have made a dent but this war
will never end
poison-flavored malware: typosqua!ing
publishing packages with names that are very close to real
names
Historically this was competitive: authors would try to steal traffic
to pump their download numbers
somebody typosqua!ed moment.js with another date-forma!ing package
also accidental JSONStream vs jsonstream
recently it's been nefarious: typosquat of cross-env as crossenv with
a env var stealer
typosquat of bluebird wrapping bluebird with a cryptocoin miner
Adam Baldwin typosqua!ed coffee-script early on
it took days for the community to notice
now it takes weeks if the community notices at all
as spiderman said, with great popularity comes great annoyance
automated similarity checker
None
this war will never end so long as there is
$ to be made
4. Who published this package?
What happens if somebody steals JDD's auth token & posts
malware as lodash?
Well, that's scary. npm auth tokens are sensitive.
new! tools in the npm cli to help you control
auth tokens
new command: npm token control your auth tokens
npm token create --readonly
read-only auth tokens the principle of least power
give your CI system a read-only token
npm token create --cidr=[10.0.0.1/32]
CIDR-bound tokens bind tokens to IP ranges
further limit your tokens by controlling where they can be
used
npm token list npm token delete <tokenKey>
None
new command: npm profile
set your profile data like your email or ...
None
well that's boring
None
that's not boring
npm profile enable-2fa two-factor authentication is here
require regular password plus a one-time password
npm profile enable-2fa auth-only
auth-only: any time you log in or manipulate tokens
npm profile enable-2fa auth-and-writes
None
writes: your package publications pass the --otp flag
npm publish --otp=123456 pass it on the command line!
use a TOTP code generation app Google Authenticator, Authy, etc
npm install -g npm@next try it now!
code: github.com/npm/npm-profile api docs: github.com/npm/registry
one more thing
coming a!raction! protect a package with 2FA
require an OTP any time that package is published by
anybody
protect packages with many maintainers next cli minor release 5.6.0
coming soon! 2fa for your npm organization
coming soon! npm ci 3x speed for your CI installs
but what about package signing? we think we've figured out
how
coming soon! even more
questions? help se!ing this up? come see me & puppies
at the npm booth
npm wants you to develop in confidence
npm loves you