Skip to content

CodingThailand's Blog

by โค้ชเอก

Menu
  • About Me
Menu

สรุป 14 ข้อ NPM Security Best Practices

Posted on 29/12/202529/12/2025 by โค้ชเอก

หลังจากที่ npm มีปัญหาเรื่อง supply-chain attack, malware, phishing, spam, และ incident ต่าง ๆ ดังนั้นนักพัฒนาและผู้ดูแลแพ็กเกจจึงควรมีแนวทางป้องกันความปลอดภัยที่ดี ดังนี้ครับ

.

สำหรับนักพัฒนา (Developers)

1. Pin Dependency Versions

– ตรึงเวอร์ชัน dependency ให้แน่นอน หลีกเลี่ยงการใช้ ^ หรือ ~

– ใช้ –save-exact (เพื่อ ​pin เวอร์ชันไปเลย) เช่น

npm install –save-exact react

pnpm add –save-exact react

yarn add –save-exact react

ป.ล. –save-exact สามารถตั้งเป็น global ได้

– ใช้ overrides (npm, pnpm) หรือ resolutions (yarn) เพื่อควบคุม transitive dependencies ให้ตรงตามเวอร์ชันที่ปลอดภัย

.

2. Include Lockfiles (ใช้และ commit lockfile)

– ถ้าไม่ใช้ lockfile เวลา install dependency บนเครื่องต่าง ๆ (dev, staging, production) อาจได้เวอร์ชัน ไม่เหมือนกัน เพราะ dependency อาจอัปเดต minor/patch เอง

– commit lockfile (package-lock.json, pnpm-lock.yaml, bun.lock, yarn.lock, deno.lock) ลง Git เสมอ

– ใช้คำสั่งติดตั้งที่อ้างอิง lockfile โดยตรง เช่น

npm ci

bun install –frozen-lockfile

yarn install –frozen-lockfile

deno install –frozen

.

3. Disable Lifecycle Scripts (ปิดการทำงานของ lifecycle scripts)

– ปิดการทำงานของ preinstall, postinstall ที่มักถูกใช้เป็นช่องโหว่โจมตี เช่น worm อย่าง Shai-Hulud ที่แอบแก้ package.json เพื่อใส่ postinstall ขโมย credentials

คำสั่ง:

npm config set ignore-scripts true –global

yarn config set enableScripts false

(bun, pnpm, deno ปิดไว้เป็นค่าเริ่มต้นอยู่แล้ว)

.

4. Set Minimal Release Age

– ป้องกันการติดตั้ง package ที่เพิ่งถูกปล่อยไม่นาน (เสี่ยง malware)

เช่น pnpm config set minimumReleaseAge 1440 (1 วัน)

npm install –before=”$(date -v -1d)”

.

5. ใช้ Permission Model

Node.js, Deno มีระบบจำกัดสิทธิ์ เช่นไฟล์, network

ตัวอย่าง:

node –permission index.js

deno run –allow-read script.ts

.

6. ลดการใช้ External Dependencies

– ใช้ฟีเจอร์ built-in ของ Node.js, Deno, Bun แทน lib เล็ก ๆ

เช่น

ใช้ fetch แทน axios

ใช้ node:test แทน jest

ใช้ –env-file แทน dotenv

.

สำหรับผู้ดูแลแพ็กเกจ (Maintainers)

7. Enable 2FA

– เปิด Two-Factor Authentication บัญชี NPM

– ใช้ Security Key (WebAuthn) จะปลอดภัยกว่า OTP

.

8. Create Tokens ด้วย Limited Access

– ใช้ Granular Access Tokens แทน Legacy Token

– จำกัด scope, package, IP, และตั้งวันหมดอายุ

.

9. Generate Provenance Statements

– เปิด provenance เพื่อตรวจสอบว่ามีการ build มาจาก source ที่โปร่งใส

– ใช้ npm publish –provenance หรือกำหนดใน .npmrc

– แนะนำใช้ Trusted Publishing (OIDC) แทน token

.

10. Review Published Files

– จำกัดไฟล์ที่ publish โดยใช้ “files”: […] หรือ .npmignore

– ตรวจสอบด้วย npm pack –dry-run

.

หมวดอื่น ๆ (Miscellaneous)

11. NPM Organization

– เปิดบังคับใช้ 2FA ระดับองค์กร

– ลดจำนวนสมาชิกที่รับผิดชอบ

– แยกทีมเพื่อจัดการ permission แต่ละ package

.

12. Use Private Registry

– ใช้ private registry เช่น GitHub Packages, Verdaccio, Artifactory

– ควบคุมนโยบาย package ภายในองค์กร

.

13. Audit, Monitor และ Security Tools

– ตรวจสอบ dependency ด้วย audit tool เช่น

npm audit, npm audit fix

pnpm audit

bun audit

yarn npm audit

.

14. Support OSS

– สนับสนุนโครงการ Open Source ที่ใช้งาน เพื่อ ecosystem แข็งแรงขึ้น

Category: Uncategorized

ใส่ความเห็น ยกเลิกการตอบ

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  • .NET
  • Android
  • Angular
  • Angular 2
  • Coding
  • CSS
  • Database
  • Editor
  • Flutter
  • Git
  • HTML5
  • Ionic 2
  • Ionic 4
  • Ionic Framwork
  • JavaScript
  • Laravel
  • Laravel 5
  • Node.js
  • PHP
  • PHP 7
  • Plugins
  • React
  • React Native
  • Template
  • Tools
  • TypeScript
  • UI
  • Uncategorized
  • Vue.js
  • XAMPP
  • Yii
  • คอร์สเรียน
  • แรงบันดาลใจ
  • มกราคม 2026
  • ธันวาคม 2025
  • กรกฎาคม 2025
  • เมษายน 2025
  • พฤศจิกายน 2024
  • ตุลาคม 2024
  • เมษายน 2020
  • กุมภาพันธ์ 2020
  • สิงหาคม 2019
  • กันยายน 2018
  • สิงหาคม 2018
  • กุมภาพันธ์ 2018
  • พฤศจิกายน 2017
  • ตุลาคม 2017
  • สิงหาคม 2017
  • กรกฎาคม 2017
  • เมษายน 2017
  • ตุลาคม 2016
  • สิงหาคม 2016
  • พฤษภาคม 2016

.NET android Angular Angular 2 Atom Coding Coding Standard CSS CSS 3 Datepicker extensions Git HTML HTML5 Ionic2 JavaScript Laravel5 laravel 5.5 MariaDB Material Design MySQL Node.js npm PHP PHP7 plugins PouchDB recaptcha Restful sail.js template typescript typscript XAMPP Yii2

© 2026 CodingThailand's Blog | Powered by Minimalist Blog WordPress Theme