CodeBlanks Logo Icon CodeBlanks

Security

JWT, helmet ve rate limiting eklersin.

Security ara katmanı

Bu derste iskelete security ara katmanı ekleyeceğiz. Express'in app.use metodu tüm isteklerden önce çalışan ara katmanlar tanımlar. Güvenlik başlıkları, kimlik doğrulama ve rate limiting burada yapılır.

Örnek: app.use((req, res, next) => { res.setHeader("X-Content-Type-Options", "nosniff"); next(); });. Bu ara katman her isteğe güvenlik başlığı ekler ve sonraki katmana geçer. next() çağrısı zincirin devam etmesini sağlar; çağrılmazsa istek yanıt alamaz. Üretimde helmet gibi kütüphaneler yaygın güvenlik başlıklarını otomatik ekler. Kimlik doğrulama, CORS ve rate limiting de ara katman olarak eklenir. Ara katmanlar, Express'in güvenlik modelinin temelidir.

next() kavramı

Bir ara katman, işini bitirince next()'i çağırır. Bu, Express'e sonraki ara katmana veya rotaya geçmesini söyler. next() çağrılmazsa istek asla yanıt alamaz; askıda kalır.

Örnek: app.use((req, res, next) => { if (!req.headers.authorization) return res.status(401).end(); next(); });. Bu ara katman, yetkilendirme başlığı yoksa 401 döndürür; varsa next() ile sonraki katmana geçer. Bu desen, kimlik doğrulama ara katmanlarında yaygındır. next(err) ile bir hata da geçilebilir; bu hata ara katmanına gider. Ara katman sırası önemlidir; güvenlik ara katmanları rotalardan önce eklenir. Bu, tüm isteklerin önce güvenlik kontrolünden geçmesini sağlar.

Uygulama Security ara katmanını ekle

Aşağıdaki iskelete app.use((req, res, next) => { next(); }) satırını ekle. console.log ile "Security hazır" yaz.

Başlangıç kodu

index.js
const express = require("express");
const app = express();
app.get("/", (req, res) => res.json({ durum: "ok" }));
const db = { ready: true };
app.get("/db", (req, res) => res.json({ db: db.ready }));
const io = { on: () => {} };
// buraya security ara katmanı ekle
// buraya yaz
// "Security hazır" yazdır
// buraya yaz

Örnek çözüm

index.js
const express = require("express");
const app = express();
app.get("/", (req, res) => res.json({ durum: "ok" }));
const db = { ready: true };
app.get("/db", (req, res) => res.json({ db: db.ready }));
const io = { on: () => {} };
app.use((req, res, next) => { next(); });
console.log("Security hazır");

Beklenen çıktı

Security hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 next çağrısını tamamla

Soru
app.use((req, res, next) => { res.setHeader("X", "Y"); ____(); });
Cevap
app.use((req, res, next) => { res.setHeader("X", "Y"); next(); });

Açıklama: next() ile zincir devam eder.

2 app.use ne zaman çağrılır?

index.js
app.use((req, res, next) => { next(); })
  • Yalnızca bir rotada
  • Yalnızca sunucu kapandığında
  • Yalnızca hata durumunda
  • Tüm isteklerden önce Doğru cevap

Açıklama: app.use tüm isteklerden önce çağrılır.

3 Parçayı rolüne eşle

Kavram Anlamı
app.use Ara katman ekler
next() Zinciri devam ettirir
res.setHeader Başlık ekler
helmet Güvenlik kütüphanesi

İleri seviye bölümündeki tüm dersler