Ana içeriğe geç

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

  1. 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.

ValidatorAçı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)

  1. 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

  1. Validation ile Sanitization farkı nedir? Validation kontrol eder, sanitization değiştirir.

  2. Özel kural yazabilir miyim? Evet, .custom() ile tamamen serbestsiniz.

  3. 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.