Express.js ile Güvenli Form Yönetimi: Express-Validator Rehberi
Express.js ile Güvenli Form Yönetimi
Web uygulamalarında kullanıcıdan gelen veriler en büyük güvenlik riskidir.
Formlar, dosya yüklemeleri ve API istekleri mutlaka kontrol edilmelidir.
Bu rehberde Express.js projelerinde Express-Validator kullanarak
form girdilerini nasıl doğrulayacağınızı ve temizleyeceğinizi öğreneceksiniz.
Amaç net:
SQL Injection ve XSS gibi saldırılara karşı sağlam bir savunma hattı kurmak.
Bu Rehberde Ne Öğreneceksiniz?
- Express-Validator ile form doğrulama
- Validation ve Sanitization farkı
- Hata mesajlarıyla kullanıcı deneyimi artırma
- Güvenli dosya yükleme mantığı
- Temiz ve ölçeklenebilir yapı kurma
Ön Gereksinimler
Başlamadan önce şunlar hazır olmalı:
- Node.js v14.x veya üzeri
- Temel JavaScript bilgisi
- Express.js ile daha önce çalışmış olmak
- Terminal erişimi
Neden Form Doğrulaması Yapmalıyız?
Form doğrulama bir tercih değil, zorunluluktur.
Başlıca nedenler:
-
Güvenlik:
Zararlı SQL veya script girişlerini engeller. -
Veri bütünlüğü:
Yanlış formatlı verilerin veritabanına girmesini önler. -
Kullanıcı deneyimi:
Hatalar anında ve anlaşılır şekilde gösterilir.
Proje Kurulumu
Projeyi Başlatın
mkdir rabisu-form-demo
cd rabisu-form-demo
npm init -y
- Bu komut yeni bir Node.js projesi oluşturur.
Gerekli Paketleri Kurun
npm install express express-validator
npm install --save-dev nodemon
- Express sunucu kurar, Express-Validator doğrulama yapar.
Temel Form Doğrulama Örneği
- Aşağıda basit bir /signup endpoint’i bulunuyor.
const express = require("express");
const app = express();
const { body, validationResult } = require("express-validator");
app.use(express.json());
app.post(
"/signup",
[
body("name")
.notEmpty()
.withMessage("İsim alanı boş bırakılamaz"),
body("email")
.isEmail()
.withMessage("Geçerli bir e-posta giriniz"),
body("password")
.notEmpty()
.withMessage("Şifre gereklidir"),
],
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
res.json({ success: "Kayıt başarılı!" });
}
);
app.listen(3000, () =>
console.log("Sunucu http://localhost:3000 adresinde çalışıyor")
);
- Bu yapı, gelen verileri sunucuya girmeden önce kontrol eder.
| Validator | Açıklama |
|---|---|
| isEmail() | E-posta formatı |
| isLength() | Uzunluk kontrolü |
| isNumeric() | Sayısal veri |
| isDate() | Tarih formatı |
| isURL() | URL doğrulama |
Veri standart ve güvenli hale getirilmelidir.
app.post(
"/sanitized-input",
[
body("name").trim().notEmpty(),
body("email").trim().isEmail().normalizeEmail(),
body("dogumTarihi").toDate(),
],
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
console.log(req.body);
res.json({ success: "Veriler temizlendi" });
}
);
- normalizeEmail() e-postayı her zaman aynı formatta tutar.
Dosya Yükleme (Opsiyonel)
- Dosya doğrulaması için multer kullanılır.
Özet mantık:
npm install multer
-
Dosya boyutu sınırı koy
-
upload.single() ile tek dosya kabul et
Diğer alanları Express-Validator ile kontrol et
Sıkça Sorulan Sorular
-
Validation ile Sanitization farkı nedir? Validation kontrol eder, sanitization değiştirir.
-
Özel kural yazabilir miyim? Evet, .custom() ile tamamen serbestsiniz.
-
Kod tekrarını nasıl azaltırım? Doğrulama zincirlerini ayrı dosyada tutabilirsiniz.
Sonuç
Bu rehberde Express.js projelerinde kullanıcı girdilerini güvenli, temiz ve sürdürülebilir şekilde yönetmeyi öğrendiniz.
Express-Validator ile uygulamanızı güçlendirdiniz. Sıradaki adım: bunu sağlam bir altyapıda çalıştırmak.
🚀Rabisu Bulut VDS altyapısında projelerinizi hemen test edebilirsiniz. Güvenli kod, güçlü sunucu ile tamamlanır.