Node.js
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.
Örnek çözümü göster
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");
Kendini test et
-
next çağrısını tamamla
app.use((req, res, next) => { res.setHeader("X", "Y"); ____(); });
Cevabı göster
app.use((req, res, next) => { res.setHeader("X", "Y"); next(); });
-
app.use ne zaman çağrılır?
app.use((req, res, next) => { next(); })
- Yalnızca bir rotada
- Yalnızca sunucu kapandığında
- Yalnızca hata durumunda
- Tüm isteklerden önce
Cevabı göster
Tüm isteklerden önce — app.use tüm isteklerden önce çağrılır.
-
Parçayı rolüne eşle
- app.use
- Ara katman ekler
- next()
- Zinciri devam ettirir
- res.setHeader
- Başlık ekler
- helmet
- Güvenlik kütüphanesi
Sıradaki ders: Birleştirme