Ana içeriğe geç

Express.js Form Güvenliği: Express-Validator ile Validation ve Sanitization

Bu rehberde ne öğreneceksiniz?

Bu rehberde Express-Validator kullanarak kullanıcı girdilerini güvenli şekilde işleyeceksiniz.
Form doğrulama, veri temizleme ve dosya yükleme güvenliğini öğreneceksiniz.
Amaç, XSS ve SQL Injection risklerini azaltmaktır.


🧠 Teknik Özet

Konu, Express.js form verilerinin güvenli işlenmesidir.
Problem, hatalı ve zararlı kullanıcı girdileridir.
Çözüm, Express-Validator ve Multer entegrasyonudur.


Ön Hazırlıklar

Başlamadan önce aşağıdakiler hazır olmalıdır:

  • Node.js (v14 ve üzeri)
  • Express.js bilgisi
  • JavaScript temelleri
  • VS Code veya benzeri editör

1. Neden Girdi Doğrulama Gerekli?

Kullanıcı girdileri sık saldırı hedefidir.
Yanlış işlenen formlar büyük güvenlik açıkları doğurur.

Başlıca riskler:

  • SQL Injection
  • XSS saldırıları
  • Tutarsız veri kayıtları

Doğrulama ve temizleme bu riskleri azaltır.


2. Temel Kavramlar

  • Validation: Verinin kurallara uyup uymadığını kontrol eder
  • Sanitization: Veriyi temizler veya dönüştürür
  • Validation Chain: Ardışık doğrulama ve temizleme adımlarıdır

3. Proje Kurulumu ve Paketler

mkdir express-form-guvenligi
cd express-form-guvenligi
npm init -y
npm install express express-validator
npm install --save-dev nodemon
  • Bu adımlar proje yapısını hazırlar.

4. Temel Form Doğrulama Örneği


const express = require("express");
const { body, validationResult } = require("express-validator");

const app = express();
app.use(express.json());

app.post(
"/kayit-ol",
[
body("isim").notEmpty().withMessage("İsim alanı boş olamaz."),
body("email").isEmail().withMessage("Geçerli e-posta girin."),
body("sifre").isLength({ min: 6 }).withMessage("Şifre en az 6 karakter."),
],
(req, res) => {
const errors = validationResult(req);

if (!errors.isEmpty()) {
return res.status(400).json({ hatalar: errors.array() });
}

res.status(200).json({ mesaj: "Kayıt başarılı" });
}
);

app.listen(3000, () => {
console.log("Sunucu 3000 portunda çalışıyor");
});
  • Bu kod, form alanlarını doğrular ve hatalı girdileri engeller.

5. Sık Kullanılan Validator’lar

ValidatorAçıklama
isEmailE-posta formatı kontrolü
notEmptyBoş değer kontrolü
isLengthKarakter uzunluğu kontrolü
isNumericSayısal veri kontrolü
isURLURL doğrulama
  • Bu kurallar zincirlenebilir.

6. Dosya Yükleme Güvenliği (Multer)

6.1 Multer Kurulumu


npm install multer
  • Bu paket dosya yüklemeyi yönetir.

6.2 Dosya Yükleme ve Doğrulama


const multer = require("multer");

const depolama = multer.diskStorage({
destination: "./yuklemeler/",
filename: (req, file, cb) => {
cb(null, Date.now() + "-" + file.originalname);
},
});

const yukleme = multer({
storage: depolama,
limits: { fileSize: 1024 * 1024 },
});

app.post(
"/dosya-yukle",
yukleme.single("profil_resmi"),
[body("aciklama").notEmpty()],
(req, res) => {
const errors = validationResult(req);

if (!req.file) {
return res.status(400).json({ hata: "Dosya seçilmedi." });
}

if (!errors.isEmpty()) {
return res.status(400).json({ hatalar: errors.array() });
}

res.status(200).json({ mesaj: "Dosya yüklendi" });
}
);
  • Bu yapı, dosya boyutunu sınırlar ve form alanlarını doğrular.

7. Veri Temizleme (Sanitization)


app.post(
"/temiz-veri",
[
body("email").trim().isEmail().normalizeEmail(),
body("yorum").trim().escape(),
body("dogum_tarihi").toDate(),
],
(req, res) => {
res.json({ temiz_veri: req.body });
}
);
  • Bu kod, boşlukları siler ve zararlı içerikleri temizler.

8. Validation Chain Mantığı

  1. Bir alana birden fazla kontrol uygulanabilir.

Örnek:

  • body("email").isEmail().trim().normalizeEmail()

  • Bu yapı sıralı kontrol sağlar.


Sıkça Sorulan Sorular

  1. Validation ve Sanitization farkı nedir? Validation kontrol eder. Sanitization veriyi değiştirir.

  2. validationResult neden gerekli? Hatalar otomatik fırlatılmaz. Manuel kontrol gerekir.

  3. Bu yöntem SQL Injection’ı engeller mi? Büyük ölçüde evet. Parametreli sorgular da kullanılmalıdır.

  4. Özel validator yazılabilir mi? Evet. .custom() metodu kullanılabilir.


Sonuç

Bu rehberde Express.js formlarını güvenli hale getirdiniz. Doğrulama ve temizleme ile saldırı risklerini azalttınız. Bu yaklaşım, güvenli Node.js uygulamalarının temelidir.

Geliştirdiğiniz projeleri Rabisu Bulut altyapısında güvenle yayınlayabilirsiniz.