Security
- Node.js kursu
- İleri seviye
- Ders 82/83
- 6 dk
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
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
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
app.use((req, res, next) => { res.setHeader("X", "Y"); ____(); });
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?
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 |