İçeriğe atla
0 XP 0
0/4

Puan ders bitince hesaba yazılır. Bu dersi tamamlayınca +50 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

8 dk · 50 XP · 4 etkinlik

İzin listesiyle girdi doğrulama

Bir form gönderildiğinde sunucunun ilk işi, gelen veriye güvenmemektir. İstemci tarafında yazılmış bir doğrulama kullanıcı deneyimini iyileştirir ama güvenlik sağlamaz, çünkü saldırgan tarayıcıyı atlayıp isteği doğrudan sunucuya yollar. Gerçek sınır sunucu tarafındadır. Doğrulama iki şekilde kurulabilir: engelleme listesi bilinen kötü kalıpları reddeder, izin listesi yalnız bilinen iyi kalıpları kabul eder. Engelleme listesi kaybeden taraftadır, çünkü saldırganın deneyebileceği kötü varyasyon sayısı sonsuza yakındır, oysa iyi kalıp genelde sabittir. AltayKargo iade servisinde üç alan var: takip numarası, tutar, açıklama metni. Bu derste üçünü de izin listesiyle doğrulayacaksın. Bu üç alan, modülün geri kalanında da tekrar karşına çıkacak; aynı veriyi önce doğrulayacak, sonra ekrana basarken kodlayacak, en son da sorguya güvenle taşıyacaksın.

İstemcitarayıcı, JavaScriptUygulamayönlendirme, iş kuralıŞablon motoruçıktı üretimiVeri katmanıSQL, dosya
Bir isteğin uygulama içindeki katmanları. Girdi doğrulama uygulama katmanına girerken yapılır; bu modülün sonraki dersleri şablon motoru ve veri katmanını ele alacak.

Doğrulama tam olarak uygulama katmanına girerken çalışır, çünkü veri o noktadan sonra iş kuralına ve depoya akar. Her alan için ayrı bir izin listesi tanımlanır: tip, uzunluk sınırı, karakter seti, aralık. Takip numarası sabit bir kalıba uyar: AK harfleriyle başlayıp altı rakamla biter. Tutar, sıfır ile yüz bin arasında bir sayı olmalıdır. Açıklama metni beş yüz karaktere kadar serbest metin kabul eder ama kontrol karakteri taşımamalıdır. Regex bu kontrollerden yalnız biridir; tip ve aralık kontrolü ayrı satırlarda kalmalıdır, aksi halde tek bir karmaşık kalıp hem okunmaz hem yavaş çalışabilir. Bu üç kontrolü ayrı satırlarda tutmak, hangi kuralın hangi alanı reddettiğini sonradan okumayı da kolaylaştırır.

app.post("/api/iadeler", (req, res) => {
  const { takipNo, tutar, aciklama } = req.body;
  db.iadeler.insert({ takipNo, tutar, aciklama });
  res.json({ durum: "alindi" });
});
Önce: girdi hiç doğrulanmadan kaydediliyor.
const TAKIP_NO = /^AK\d{6}$/;
app.post("/api/iadeler", (req, res) => {
  const { takipNo, tutar, aciklama } = req.body;
  if (!TAKIP_NO.test(takipNo)) return res.status(400).json({ hata: "gecersiz_takip_no" });
  if (typeof tutar !== "number" || tutar < 0 || tutar > 100000) return res.status(400).json({ hata: "gecersiz_tutar" });
  if (typeof aciklama !== "string" || aciklama.length > 500 || /[\x00-\x1F]/.test(aciklama)) return res.status(400).json({ hata: "gecersiz_aciklama" });
  db.iadeler.insert({ takipNo, tutar, aciklama });
  res.json({ durum: "alindi" });
});
Sonra: her alan izin listesiyle doğrulanıyor.

İkinci sürümde her hata ayrı kontrol edilir ve kendi 400 yanıtını döner. Regex kontrolü takip numarasının biçimini kilitler, tip ve aralık kontrolü tutarı sınırlar, kontrol karakteri reddi açıklamanın ekranı ya da log satırını bozmasını önler. Sunucu asla girdiyi kendiliğinden düzeltmeye çalışmaz; kalıba uymayan istek reddedilir ve kullanıcı doğru biçimle tekrar dener. Bu tutum, kullanıcıya net bir geri bildirim verirken sunucuyu da beklenmeyen bir veri tipinden korur.