Masdika Loading..
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portfolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Dari Laptop Bekas Jadi Server Pribadi: Cara Membangun Home Server Murah Menggunakan ISP MyRepublic dengan Public IP
  • Pembuatan Subnet dan Alokasi IP Address pada Amazon Web Service VPC
  • Instalasi dan Konfigurasi AWS CLI pada EC2 (Lab Guide)
  • Membangun Arsitektur Web + Database Highly Available di AWS (RDS Multi-AZ)
  • Cara Reset Password OpenBSD di Proxmox via VNC

Recent Comments

  1. Alif on Jangan Gunakan latest Tag pada Docker Images! Ini Alasannya
  2. Sahrull on Panduan Lengkap Anti-DDoS: Installasi Iptables, Hardening, dan Cloudflare Proxy
  3. VSTRA on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  4. Rikiy on Cara Mudah Deploy Website Node.js Menggunakan Docker
  5. Masdika.BIZ.ID on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Categories

  • Tutorial

Masdika.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Hardening Next.js + Docker agar Aman dari Paket NPM Berbahaya

September 12, 2025 Tutorial by Masdika.ID
Hardening Next.js + Docker agar Aman dari Paket NPM Berbahaya

Belakangan ini dunia pengembangan perangkat lunak digemparkan oleh temuan paket NPM dan Go berbahaya yang bisa menghapus data developer atau bahkan menjalankan kode jahat dari jarak jauh. Informasi lengkapnya bisa dibaca di 👉 Prosperita News.

Bagi developer yang membangun aplikasi dengan Next.js dan menjalankannya di Docker, kabar ini jadi peringatan penting. Kita harus menerapkan langkah-langkah hardening agar paket berbahaya tidak merusak data ataupun host server kita.

⚠️ Ancaman Paket NPM & Go Berbahaya

Pada Ekosistem NPM

  • Dua paket berbahaya (naya-flore dan nvlore-hsc) menyamar sebagai library WhatsApp Business API.
  • Sudah diunduh >1.100 kali.
  • Kode berbahaya di dalamnya bisa mengeksekusi:
    • Kill switch (skip target tertentu).
    • Perintah rm -rf * yang menghapus semua file di direktori project.

Pada Ekosistem Go

  • 11 paket berbahaya ditemukan dengan teknik typosquatting (nama mirip dengan paket asli).
  • Berisi kode untuk:
    • Membuka shell tersembunyi.
    • Mengunduh payload dari domain mencurigakan.
    • Menjalankan payload langsung di memori (in-memory execution).

🛡️ Solusi: Hardening Next.js dengan Docker

Berikut adalah konfigurasi Dockerfile dan docker-compose.yml final yang saya pakai untuk melindungi project Next.js agar aman dari serangan ini.

1. Dockerfile Multi-Stage Build

# ===========================
# Stage 1: Builder
# ===========================
FROM node:20-alpine AS builder
WORKDIR /app

# Pakai pnpm di builder
RUN npm install -g pnpm

# Copy manifest & lockfile lebih dulu biar cache kepake
COPY package.json pnpm-lock.yaml ./

# Install deps di dalam container (aman dari host)
# Pakai --no-frozen-lockfile biar tetep jalan saat lockfile out-of-sync
RUN pnpm install --no-frozen-lockfile

# Copy source
COPY . .

# Build Next.js
RUN pnpm build

# ===========================
# Stage 2: Runtime
# ===========================
FROM node:20-alpine AS runtime
WORKDIR /app

# Buat user non-root (security)
RUN addgroup -S app && adduser -S app -G app

# Copy hanya yang diperlukan untuk runtime
COPY --from=builder /app/package.json ./
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public

# Environment prod
ENV NODE_ENV=production \
    NEXT_TELEMETRY_DISABLED=1 \
    PORT=3000

# Pakai user non-root
USER app

EXPOSE 3000

# Jalankan via npm (tidak perlu pnpm di runtime)
CMD ["npm", "run", "start"]

✅ Keuntungannya: hanya hasil build yang ikut ke runtime, dependency dev tidak terbawa.

2. docker-compose.yml dengan Hardening

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: infradev-app
    restart: always
    expose:
      - "3000"
    environment:
      - NODE_ENV=production
      - NEXT_TELEMETRY_DISABLED=1
      - PORT=3000

    # Security hardening
    read_only: true
    tmpfs:
      - /app/.next/cache
      - /tmp
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    user: "1000:1000"

    # Batas resource
    deploy:
      resources:
        limits:
          cpus: "2.0"
          memory: 4024M

  caddy:
    image: caddy:alpine
    container_name: infradev-caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
    depends_on:
      - app

  audit:
    build:
      context: .
      dockerfile: Dockerfile
      target: builder   #  pakai stage builder (ada pnpm & dev deps)
    command: ["pnpm", "audit"]

volumes:
  caddy_data:
  caddy_config:

🔑 Kenapa Konfigurasi Ini Aman

  • Multi-stage build → runtime lebih kecil & aman.
  • Non-root user → proses Node.js tidak jalan sebagai root.
  • Filesystem read-only + tmpfs → malware rm -rf hanya bisa hapus cache, bukan data penting.
  • Drop capabilities & no-new-privileges → mencegah privilege escalation.
  • Audit service → jalankan docker compose run --rm audit untuk cek dependency secara rutin.
  • Caddy reverse proxy → lapisan ekstra dengan auto HTTPS.

📊 Hasil audit terakhir:

root@server:/project# docker compose run --rm audit
No known vulnerabilities found

✅ Artinya semua dependency saat ini aman.

🎯 Best Practice

  • Selalu commit pnpm-lock.yaml.
  • Cek nama paket sebelum install (hindari typosquatting).
  • Jalankan audit secara berkala.
  • Update image base (node:20-alpine & caddy:alpine).

🚀 Kesimpulan

👉 Hasilnya, hacker tidak bisa melihat atau mengambil data penting dari host lewat container ini. Kalaupun ada paket jahat, dampaknya hanya terbatas di dalam container.

Ancaman paket berbahaya di ekosistem NPM & Go nyata dan sudah menargetkan developer. Dengan konfigurasi Docker + Next.js yang di-hardening, risiko bisa diminimalkan:

  • Dependency terisolasi di container 🧱
  • Non-root + read-only filesystem 🛡️
  • Audit otomatis untuk keamanan 📊

Hasilnya, projek lebih aman dari kehilangan data maupun eksploitasi.

👉 Sumber berita: Prosperita News

Share:
Tags: dockergohardeningnext.jsnpmppnpm
Related Posts
VM vs Container vs Pod – Perbedaan Lengkap untuk Cloud & DevOps!

Dalam dunia Cloud Computing dan DevOps, tiga istilah yang paling sering kita dengar adalah Virtual Machine (VM), Container, dan Pod….

Deploy Go REST API di Kubernetes (K3s) dengan PostgreSQL, SSL Cloudflare, dan Autoscaling

Artikel ini akan membahas langkah end-to-end untuk membangun aplikasi Go REST API, membuat image Docker, lalu melakukan deployment di Kubernetes…

Post navigation

Prev
Next
Write a comment Cancel Reply


© 2025 www.masdika.id — Semua hak cipta dilindungi