Bloga Dön
Web Geliştirme

Web Sitesi Formuna Gelen Spam Nasıl Engellenir?

Web sitesi iletişim formuna gelen spam nasıl engellenir? Honeypot alanı, zaman kontrolü, hız sınırı, CAPTCHA seçenekleri, sunucu tarafı doğrulama ve gerçek talepleri kaybetmeden filtreleme.

Form SpamWeb GüvenliğiCAPTCHAWeb Geliştirme

Web sitesi formuna gelen spam, tek bir yöntemle değil katmanlı bir kurguyla engellenir: görünmez bir tuzak alanı (honeypot), formun ne kadar sürede doldurulduğunu ölçen zaman kontrolü, aynı adresten gelen istekleri sınırlayan hız sınırı ve ancak bunlar yetmezse devreye giren CAPTCHA. Kuralların hepsi tarayıcıda değil sunucuda uygulanır; çünkü botlar formu çoğu zaman sayfayı hiç açmadan doğrudan gönderim adresine yollar. Amaç spamı sıfırlamak değil, tek bir gerçek müşteri talebini kaybetmeden gelen kutusunu okunur hâle getirmektir.

Form spamı neden bir güvenlik değil iş sorunudur?

Form spamı genellikle "can sıkıcı" diye geçiştirilir ama asıl maliyeti başka yerdedir. Gelen kutusunda günde onlarca reklam ve bağlantı mesajı biriken bir ekip, birkaç hafta sonra form bildirimlerini okumayı bırakır; gerçek teklif talebi o yığının içinde kaybolur. Ayrıca form, kullanıcıya otomatik "talebiniz alındı" e-postası gönderiyorsa botlar başkalarının adresini yazarak sizin sunucunuzu spam göndericisine çevirir ve alan adınızın e-posta itibarı düşer; bunun kurumsal e-posta teslimine etkisi teklif e-postalarınızın spam klasörüne düşmesidir.

Spam filtresinin başarısı kaç mesajı engellediğiyle değil, gerçek bir talebi kaç kez yanlışlıkla engellediğiyle ölçülür; engellenen gönderim sessizce silinmemeli, ayrı bir klasörde saklanmalıdır.

Katmanlı koruma: hangi yöntem neyi engeller?

  • Honeypot alanı: insan kullanıcıya görünmeyen ama botların otomatik doldurduğu bir alan. Dolu gelirse gönderim spam sayılır. Kullanıcıya hiçbir ek adım yüklemez ve basit botların çoğunu durdurur.
  • Zaman kontrolü: form sayfası açıldığında bir zaman damgası üretilir; birkaç saniyede gönderilen ya da günler önce açılmış bir formdan gelen istek şüphelidir. Damga, değiştirilemesin diye sunucuda imzalanır.
  • Hız sınırı: aynı IP ya da aynı e-posta adresinden kısa sürede gelen gönderim sayısı sınırlanır. Bot dalgasını ve otomatik yanıt e-postasının kötüye kullanımını keser.
  • İçerik kuralları: mesajda çok sayıda bağlantı olması, formun dili dışında tamamen farklı bir alfabe ya da bilinen spam kalıpları puanı yükseltir. Bu katman engellemek için değil, şüpheli klasörüne ayırmak için kullanılır.
  • CAPTCHA: önceki katmanlar yetmediğinde eklenir. Görünmez ya da tek tıklık doğrulama türleri, resim seçtiren eski türlere göre gerçek kullanıcıyı çok daha az yorar.

Sıralama bilinçlidir: kullanıcıya en az yük getiren katmanlar önce gelir. Doğrudan CAPTCHA ile başlamak, sorunu kullanıcıya taşımaktır; özellikle mobilde her ek adım formun doldurulma oranını düşürür. Bu yüzden yüksek dönüşümlü landing page tasarımlarında CAPTCHA son çare olarak kalır.

Sunucu tarafı kontrol örneği

Aşağıdaki örnek, bir Next.js route handler’ında honeypot, imzalı zaman damgası ve hız sınırını birlikte uyguluyor. Şüpheli gönderim kullanıcıya hata olarak dönmüyor; bot "başarılı" yanıtı alıyor, kayıt ise şüpheli olarak saklanıyor. Bota hata döndürmek, hangi kurala takıldığını öğrenmesini ve kendini ayarlamasını kolaylaştırır.

const MIN_FILL_MS = 3_000;
const MAX_AGE_MS = 2 * 60 * 60 * 1000;

export async function POST(req: Request) {
  const form = await req.formData();
  const ip = req.headers.get('x-forwarded-for')?.split(',')[0] ?? 'unknown';

  if (!(await rateLimit.allow('contact:' + ip, { max: 5, windowSec: 600 }))) {
    return Response.json({ ok: false }, { status: 429 });
  }

  const reasons: string[] = [];
  if (form.get('website')) reasons.push('honeypot'); // gizli alan

  const issuedAt = verifySignedTimestamp(String(form.get('ts') ?? ''));
  const age = issuedAt ? Date.now() - issuedAt : -1;
  if (age < MIN_FILL_MS || age > MAX_AGE_MS) reasons.push('timing');

  const message = String(form.get('message') ?? '');
  if ((message.match(/https?:\/\//g) ?? []).length > 2) reasons.push('links');

  await saveSubmission({ form, ip, suspicious: reasons.length > 0, reasons });
  if (reasons.length === 0) await notifySalesTeam(form);

  // Bota da aynı yanıt: hangi kurala takıldığını öğrenmesin
  return Response.json({ ok: true });
}

Örnekte üç ayrıntı vardır. Hız sınırı aşıldığında açık bir 429 dönülür, çünkü bu durumda gerçek kullanıcı da bir dakika sonra tekrar deneyebilmelidir. Şüpheli kayıt silinmez, yalnızca satış ekibine bildirim gitmez; haftada bir şüpheli klasörüne bakmak yanlış engellenen talebi yakalar. Gizli alanın adı da bilerek "website" gibi botların doldurmayı sevdiği bir isimdir; ekran okuyucuların bu alanı kullanıcıya okumaması için alan erişilebilirlik ağacından da gizlenmelidir, aksi hâlde görme engelli kullanıcı alanı doldurur ve spam sayılır. Bu konu web sitesi erişilebilirliği yazısındaki gizli içerik kuralıyla aynıdır.

Yalnızca iletişim formu değil: hangi formlar korunmalı?

Spam denince akla ilk iletişim formu gelir, ama botların asıl hedefi çoğu zaman sitedeki diğer formlardır. Her formun kötüye kullanım biçimi farklıdır, bu yüzden koruma da forma göre ayarlanır; tek bir kuralı bütün sitede aynı eşikle uygulamak ya gerçek kullanıcıyı yorar ya da asıl açığı kapatmaz.

  • Bülten ve kayıt formları: botlar başkalarının e-posta adresini yazar, siz de o kişiye istemediği onay e-postasını gönderirsiniz. Çift onay (adrese gelen bağlantıya tıklanmadan kayıt aktif olmaz) hem spamı hem de geçersiz adresleri listeden uzak tutar.
  • Şifre sıfırlama ve doğrulama kodu formları: her gönderim bir e-posta ya da SMS maliyetidir. Burada hız sınırı adres ve telefon bazında da uygulanır; aynı numaraya dakikada bir kod gönderilebiliyorsa fatura ve kullanıcı şikâyeti birlikte gelir.
  • Teklif ve dosya yükleme formları: dosya türü ve boyutu sunucuda kontrol edilir, yüklenen dosya herkese açık bir adresten sunulmaz. Aksi hâlde form, başkalarının zararlı dosya barındırdığı bir depoya dönüşür.
  • Yorum ve değerlendirme alanları: bağlantı içeren gönderimler yayınlanmadan önce onaya düşer; spam bağlantılarının sayfada görünmesi ziyaretçiye de arama motorlarına da kötü sinyal verir.

Pratik bir yöntem, her form için "kötüye kullanılırsa bize neye mal olur?" sorusunu sormaktır. Cevap yalnızca dağınık bir gelen kutusuysa honeypot ve zaman kontrolü yeter; cevap SMS faturası, e-posta itibarı ya da sayfada yayınlanan bağlantıysa hız sınırı ve onay adımı zorunlu hâle gelir. Bu değerlendirme bir kez yapılıp sitenin bakım notlarına yazılırsa, yeni bir form eklendiğinde aynı korumanın unutulması da engellenir.

Sık yapılan hatalar

  • Kontrolü yalnızca tarayıcıda yapmak: JavaScript doğrulaması bot için yoktur, gönderim adresi doğrudan çağrılır.
  • Kullanıcıya gönderilen otomatik yanıta mesaj içeriğini eklemek: botlar bu e-postayı başkalarına reklam taşımak için kullanır.
  • Şüpheli gönderimi kalıcı olarak silmek: yanlış engellenen gerçek talebi bir daha göremezsiniz.
  • Tek bir CAPTCHA’ya bütün yükü vermek: hedefli spam gönderen insan eliyle çalışan servisler CAPTCHA’yı geçer; hız sınırı ve içerik kuralı yine gerekir.
  • Form verisini gereğinden uzun saklamak ya da IP adresini süresiz tutmak: bunlar kişisel veridir ve saklama süresi KVKK uyumu kapsamında belirlenmelidir.

Form koruması, sitenin genel güvenliğinin küçük ama görünür bir parçasıdır; aynı hız sınırı ve sunucu tarafı doğrulama ilkeleri giriş ekranı ve arama kutusu için de geçerlidir. Genel çerçeveyi web sitesi güvenliği yazısında anlattık. Form gönderimlerini dönüşüm olarak ölçüyorsanız, yalnızca şüpheli olmayan gönderimleri olay olarak saymak da önemlidir; aksi hâlde Google Analytics 4 raporunuz spam dalgasını kampanya başarısı gibi gösterir.

Sonuç

Form spamını engellemenin yolu tek bir araç değil, sunucuda uygulanan katmanlı bir kurgudur: honeypot ve zaman kontrolü basit botları kullanıcıya hiç yük getirmeden durdurur, hız sınırı dalgaları keser, CAPTCHA yalnızca gerektiğinde eklenir ve şüpheli gönderim silinmeden ayrı tutulur. Sitenizin formlarını gerçek talepleri kaybetmeden korumak isterseniz web geliştirme hizmetimize göz atabilir veya teklif alabilirsiniz.

Projenizi Hayata Geçirelim

Web sitesi, mobil uygulama veya kurumsal yazılım projeniz için ücretsiz danışmanlık alın.

Ücretsiz Teklif AlWeb Geliştirme hizmetimizi inceleyin