ViraStack
  • Academy
  • About
  • Support
HomeSourcesContribute
ViraStack

A frontend ecosystem: free guides, project templates, AI rules, and form components.

Products

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Explore

  • Academy
  • About
  • Brand
  • Support

© 2026 ViraStack.

Open source · MIT

Auth ve Güvenlik

08 / 09

Secret ve bağımlılık güvenliği

Anahtarı istemciden uzak tutma, .env ve npm tedarik zinciri saldırıları.

Bir uygulama iki yoldan, kendi kodunuzda hiçbir hata yokken de ele geçirilebilir. Ya bir anahtar sızar ya da kurduğunuz bir paket kötü kod taşır. Bu ders ikisinin de en sık görülen hâllerini ve basit önlemlerini anlatıyor.

Tip

.env dosyaları, NEXT_PUBLIC_ öneki ve açılışta doğrulama Ortam değişkenleri dersinde anlatıldı. Burada yalnızca güvenlik tarafı var.

Secret Nereden Sızar

1. İstemci paketi. NEXT_PUBLIC_ önekli her değişken derleme anında JavaScript paketine yazılır ve herkes okuyabilir.1 Secret okuyan modülün başına import "server-only" ekleyin; bir Client Component onu import ederse derleme hata verir.1

2. Props. Server Component'ten Client Component'e verilen her değer tarayıcıya gider. Veritabanından gelen kullanıcı nesnesini olduğu gibi aktarırsanız parola özeti ya da e-posta gibi alanlar da gider. Next.js bu yüzden yalnızca gereken alanları taşıyan küçük nesneler (DTO) döndürmeyi önerir:1

// lib/users.ts
import "server-only";

export async function getProfileDTO(id: string) {
  const user = await db.user.findUnique({ where: { id } });

  return { name: user.name, avatarUrl: user.avatarUrl };
}

3. Git geçmişi. Anahtarı içeren dosyayı silmek yetmez, eski commit'lerde durur. OWASP sızan bir anahtar için sırayı şöyle verir: önce iptal et, sonra yenisini üret, en son kayıtlardan temizle.2 Geçmişi yeniden yazmak diğer kopyaları düzeltmez; anahtarı iptal etmek tek kesin çözümdür.

Tip

GitHub'ın push protection özelliği, bilinen anahtar biçimlerini push sırasında yakalayıp reddeder. Kişisel hesaplarda açık depolara push için varsayılan olarak açıktır. Depo düzeyinde ayrıca açılması gerekir.3

Tedarik Zinciri

Bir paket kurmak, onun ve onun bağımlılıklarının yazarlarına güvenmek demektir. Liran Tal, ortalama bir npm paketiyle onlarca bakımcıya güvendiğinizi hatırlatır.4 Saldırgan bu bakımcılardan birinin hesabını ele geçirirse kötü kod sizin bilgisayarınıza ve CI'ınıza kadar gelir.

Eylül 2025'te Shai-Hulud adlı bir solucan 500'den fazla npm paketini ele geçirdi. CISA'nın uyarısına göre paket kurulduğunda bilgisayardaki GitHub token'larını ve bulut anahtarlarını topladı. Sonra geliştiricinin npm hesabıyla onun diğer paketlerine de kendini ekleyip yayınladı.5

Saldırıların çoğu üç kapıdan girer:46

SaldırıNasıl çalışır
Ele geçirilmiş paketPopüler bir paketin yeni sürümüne kötü kod eklenir
Typosquattingcross-env yerine crossenv gibi benzer isimli sahte paket
SlopsquattingYapay zekanın uydurduğu paket adıyla önceden yayınlanmış sahte paket

Kurulumu Sıkılaştırmak

Lockfile ile kurun

Lockfile, hangi sürümün kurulacağını sabitler. CI'da npm install yerine npm ci kullanın: lockfile ile package.json uyuşmazsa kurulum durur, sessizce yeni sürüm gelmez.6

Kurulum script'lerini onaylayın

Shai-Hulud gibi saldırılar kodlarını postinstall script'inde çalıştırır. npm npm 12 bağımlılıkların kurulum script'lerini artık varsayılan olarak çalıştırmıyor; pnpm pnpm bunu v10'dan beri yapıyor.78

$ pnpm add esbuild
npm warn install-scripts 1 package had install scripts blocked because they are not covered by allowScripts:
npm warn install-scripts   esbuild@0.25.0 (postinstall: node install.js)

Paketi tanıyorsanız npm install-scripts approve esbuild ile onaylarsınız. Onay package.json'daki allowScripts alanına sürümüyle birlikte yazılır.7 Testte esbuild 0.25.1'e yükseltilince onay yeniden istendi.

Yeni sürümü hemen kurmayın

Ele geçirilmiş bir sürüm çoğu zaman topluluk tarafından fark edilip kaldırılır. Yeni sürümü birkaç gün beklemek, bu süreyi size kazandıran ucuz bir önlemdir.4

# .npmrc
min-release-age=7

npm 11.10'dan beri bu ayar, son 7 gün içinde yayınlanan sürümleri kurulumdan çıkarır.7 Testte next@16.4.2 6 gün önce yayınlandığı için kurulmadı, yerine 16.4.1 geldi. pnpm'de aynı işi minimumReleaseAge yapar.8

Warning

Bekleme süresi güvenlik yamalarını da geciktirir. npm, npm audit fix bekleme yüzünden bir yamayı kuramazsa uyarır; o paketi min-release-age-exclude listesine ekleyebilirsiniz.7

Güncellemeleri bir bota bırakın

Dependabot ya da Renovate güncellemeleri pull request olarak açar. Testler geçmeden hiçbir sürüm ana dala girmez. Dependabot'un cooldown ayarı da yeni sürümleri birkaç gün bekletir; güvenlik güncellemeleri bu beklemeye takılmaz.9

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7

Bilinen açıkları tarayın

npm audit, bağımlılıklarınızda bilinen bir açık olup olmadığını söyler. Ama yalnızca bilinen açıkları bulur; yeni yayınlanmış kötü bir sürümü yakalamaz.6

Do

  • Yapay zekanın önerdiği bir paketi kurmadan önce npm view <paket> ile var olduğunu, indirme sayısını ve deposunu kontrol edin.6

  • npm ve GitHub hesabınızda kimlik avına dayanıklı iki adımlı doğrulama (passkey ya da güvenlik anahtarı) kullanın.5

  • Paket yayınlıyorsanız uzun ömürlü token yerine trusted publishing kullanın.6

Kendin Dene

  • Bir projede npm install --min-release-age=7 çalıştırın ve npm ls ile hangi sürümlerin geldiğine bakın.

  • .env.local'e sahte bir anahtar yazıp yanlışlıkla commit'leyin. Sonra dosyayı silip git log -p ile anahtarın geçmişte hâlâ durduğunu görün.

  • package.json'daki allowScripts alanını okuyun. Hangi paketin neden kurulum script'i çalıştırdığını araştırın.

Detaylı Öğrenmek İçin

  • Resmi doküman: OWASP NPM Security Cheat Sheet; lockfile, kurulum script'leri, typosquatting ve trusted publishing.6

  • Konuşma: Liran Tal, "Security Controls in the JavaScript Supply Chain" (JSNation 2022, 28 dk); lockfile'a gizlenen kod, kurulum script'leri ve gecikmeli güncelleme.4

  • Resmi doküman: CISA, Shai-Hulud uyarısı; gerçek bir saldırının nasıl yayıldığı ve önerilen adımlar.5

Kaynaklar

  • 1DocsNext.js: How to think about data security

    DTO döndürmek, `server-only`, `NEXT_PUBLIC_` değişkenlerinin istemciye gitmesi ve taint API'leri.

  • 2DocsOWASP: Secrets Management Cheat Sheet

    Sızıntıda iptal, döndürme ve silme sırası; git geçmişini yeniden yazmanın sonuçları.

  • 3DocsGitHub Docs: About push protection

    Push sırasında anahtar engelleme, kullanıcı ve depo düzeyindeki varsayılanlar.

  • 4VideoLiran Tal

    : — JSNation 2022. Bağımlılıklara duyulan güven, lockfile'a gizlenen kod, kurulum script'leri ve güncellemeleri geciktirmek.

  • 5DocsCISA: Widespread Supply Chain Compromise Impacting npm Ecosystem

    23 Eylül 2025. Shai-Hulud'un 500'den fazla paketi ele geçirmesi, topladığı anahtarlar, yayılma yolu ve öneriler.

  • 6DocsOWASP: NPM Security Cheat Sheet

    `npm ci`, kurulum script'leri, açık taraması, typosquatting, slopsquatting ve trusted publishing.

  • 7Reponpm CLI: Changelog

    11.10.0'da `min-release-age`, 12.0.0'da varsayılan olarak engellenen kurulum script'leri ve `npm install-scripts approve`.

  • 8Docspnpm: Settings

    `minimumReleaseAge` ve kurulum script'lerine izin verme ayarları.

  • 9DocsGitHub Docs: Dependabot options reference

    `cooldown` ayarı ve güvenlik güncellemelerinin bu beklemeye takılmaması.

Edit this page

Last updated: October 22, 2026

Previous step07. CSRF, CORS ve güvenlik başlıkları
Next step09. Korumalı yönetim paneliProject