Güvenli İletişim Formları: Spam, Hız Sınırları ve Veri Güvenliği

İletişim formları yaygın bir saldırı vektörüdür. Hız sınırlama, captcha, honeypot, şifreleme ve güvenli entegrasyon ile formlarınızı spam, kötüye kullanım ve veri sızıntılarından nasıl koruyacağınızı öğrenin.

DFDigiForge EkibiJun 21, 20267 dk okuma
Koyu arka planda siber koruma öğeleriyle parlayan iletişim formu

İletişim formu, genellikle bir ziyaretçinin işletmenizle ilk etkileşimidir. Aynı zamanda en çok istismar edilenlerden biridir. DigiForge'da, masum görünen bir iletişim formunun spam sellerine, veri sızıntılarına ve hatta sunucu ele geçirilmesine yol açtığı sayısız siteyi denetledik. Bunun böyle olması gerekmiyor. Birkaç pragmatik önlemle, formlarınızı güvende tutabilir ve meşru kullanıcıları rahatsız etmeyebilirsiniz.

İletişim Formları Neden Bir Güvenlik Zafiyetidir

Geliştiriciler genellikle iletişim formlarını sıradan bir şey olarak görür — bir eklenti kurar veya bir eğitimden kod parçacığı kopyalayıp işi biter. Ancak formlar harici girdi alır ve genellikle e-posta gönderme veya veritabanı kaydı ekleme gibi sunucu tarafı eylemleri tetikler. Bu da onları botlar, kazıyıcılar ve kötü niyetli aktörler için birincil hedef haline getirir. Yaygın sorunlar şunları içerir:

  • Gelen kutunuzu dolduran ve kaynakları israf eden spam gönderimleri
  • Tek bir IP'nin e-posta kotanızı tükettiği veya sunucu yüküne neden olduğu hız sınırı istismarı
  • Saldırganların kullanıcılar adına form göndermesini sağlayan siteler arası istek sahteciliği (CSRF)
  • Gönderimlerin şifrelenmemiş HTTP üzerinden iletilmesi durumunda veri ele geçirme
  • Denetlenmeyen alanlar aracılığıyla sunucu tarafı enjeksiyonu (SQL enjeksiyonu, mail() işlevinde başlık enjeksiyonu)
  • Formlar doğrudan üçüncü taraf hizmetlere bağlanıyorsa açığa çıkan API anahtarları veya uç noktalar

Bir iletişim formunu güvence altına almak karmaşık değildir. Diğer herhangi bir girdi uç noktası için kullanacağınız savunma odaklı zihniyeti uygulamayı gerektirir.

Hız Sınırlama ve Darboğaz Kontrolü

Kötüye kullanımı durdurmanın en basit yolu, tek bir istemcinin formunuzu ne sıklıkta gönderebileceğini sınırlamaktır. Hız sınırlaması olmadan, bir saldırgan dakikalar içinde binlerce istek göndererek API kotalarınızı tüketebilir veya veritabanınızı çöple doldurabilir.

Sunucu tarafı hız sınırlama

IP adresi başına belirli bir zaman aralığında maksimum gönderim sayısını zorunlu kılın. PHP'de, zaman damgalarını izlemek için dosya tabanlı bir önbellek veya Redis kullanabilirsiniz. DigiForge'de, IP başına saatte 5 gönderimlik kayan bir pencere uyguluyoruz. Laravel gibi bir framework kullanıyorsanız, yerleşik throttle middleware'i API rotaları için mükemmel çalışır. Özel PHP için hızlı bir örnek:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$cacheFile = '/tmp/rate_' . md5($ip);
$limit = 5;
$window = 3600; // 1 hour

if (file_exists($cacheFile)) {
    $data = json_decode(file_get_contents($cacheFile), true);
    if (count($data) >= $limit && (time() - $data[0]) < $window) {
        http_response_code(429);
        die('Too many submissions. Please try again later.');
    }
    $data[] = time();
    if (count($data) > $limit) array_shift($data);
} else {
    $data = [time()];
}
file_put_contents($cacheFile, json_encode($data));

Bu basit bir yaklaşımdır — üretim ortamında dosya sistemi çekişmesini önlemek için INCR ve EXPIRE ile Redis kullanın.

İstemci tarafı kısıtlama

JavaScript kullanarak ilk tıklamadan hemen sonra gönder düğmesini devre dışı bırakın. Bu, yanlışlıkla çift gönderimi önler ancak kötü niyetli botları engellemez. Her zaman sunucu tarafı kontrollerle birlikte kullanın.

İstemci tarafı sınırlamaları tek savunmanız olarak asla güvenmeyin. Bir bot, doğrudan uç noktanıza HTTP istekleri gönderebilir ve JavaScript mantığını tamamen atlayabilir.

CAPTCHA Ötesinde Anti-Spam Stratejileri

CAPTCHA'lar yıllardır başvurulan yöntem olsa da, kullanıcıları hayal kırıklığına uğratıyor ve yapay zeka tarafından giderek daha kolay aşılıyor. Katmanlı bir yaklaşım daha iyi çalışır. Genellikle bu teknikleri birleştiriyoruz:

Bal küpü alanları

Gerçek kullanıcıların asla görmediği ancak botların otomatik olarak doldurduğu gizli bir alan. style="position:absolute;left:-9999px" ile bir metin girişi yerleştirin ve etiketsiz bırakın. Sunucuda, bu alan herhangi bir değer içeriyorsa gönderimi reddedin. Bu, çoğu otomatik kazıyıcıyı yakalar.

<input type="text" name="website" style="position:absolute;left:-9999px" tabindex="-1" autocomplete="off">

Zaman tabanlı gönderimler

Sayfanın yüklenme zamanını gizli bir zaman damgası alanı veya oturum değişkeni kullanarak kaydedin. Form 3 saniyeden kısa sürede gönderilirse, neredeyse kesinlikle bir bottur. Kullanıcının formu gerçekten okuduğunu doğrular.

Token tabanlı CSRF koruması

Kullanıcı oturumuna bağlı benzersiz bir token, her form gönderiminde bulunmalıdır. Bu, bir saldırganın oturum açmış bir kullanıcıyı başka bir siteden form göndermeye kandırdığı siteler arası istek sahteciliğini önler. Çoğu framework, CSRF tokenlarını otomatik olarak oluşturur ve doğrular — etkin olduklarından emin olun.

İçerik filtreleme

Sunucuda, mesajı yaygın spam kalıplarına karşı kontrol edin: kara listeye alınmış alan adlarına bağlantılar, aşırı uzun metin veya tekrarlayan karakterler. Bilinen spam imzaları için üç ayda bir güncellenen küçük bir regex kalıpları listesi tutuyoruz.

reCAPTCHA v3 gibi modern CAPTCHA'lar daha az müdahalecidir — arka planda çalışır ve bir insan puanı atarlar. Ancak yine de Google'ın sunucularına bağımlıdırlar ve gizlilik endişeleri doğurabilirler. Dahili araçlar veya B2B uygulamaları için genellikle CAPTCHA'yı tamamen atlar ve honeypot + hız sınırlamasına güveniriz.

Veri Güvenliği ve Şifreleme

İletişim formu gönderimleri genellikle kişisel bilgiler içerir — adlar, e-posta adresleri, telefon numaraları, bazen şirket verileri. Bu veriler sızarsa, yasal ve itibar kaybıyla karşı karşıya kalırsınız. Yapmanız gerekenler şunlardır:

İletim ve depolama sırasında şifreleme

Her form gönderimi HTTPS kullanmalıdır. Sayfa HTTP üzerinden yüklense bile form eylem URL'nizi HTTPS'ye yönlendirin. Sunucuda, gönderimleri AES-256 kullanarak şifrelenmiş bir veritabanı sütununda saklayın (veya alan düzeyinde şifreleme kitaplığı kullanın). Ham verileri sorgulamanız gerekmiyorsa, tüm yükü bir sunucu tarafı anahtarıyla şifreleyin.

DigiForge'da, saklanan form gönderimlerini webroot dışında tutulan bir anahtarla şifreliyoruz ve düz metin gönderimleri asla hata günlüklerine veya e-postalara kaydetmiyoruz.

Veri toplamayı en aza indirin

Yalnızca gerçekten ihtiyacınız olan alanları toplayın. Telefon numarasına ihtiyacınız yoksa, alanı eklemeyin. Daha az alan, daha az risk demektir. Makul bir saklama politikası belirleyin — yasal uyumluluk gerekmedikçe 90 günden eski gönderimleri temizleyin.

Tüm girdileri temizleyin ve doğrulayın

E-posta formatı, telefon kalıpları ve dize uzunlukları için sunucu tarafında doğrulama kullanın. XSS'yi önlemek için HTML varlıklarını temizleyin veya kodlayın. Eski PHP mail() işleviyle e-posta gönderirken, alıcı ve konunun sabit kodlanmış olduğundan emin olun — kullanıcı tarafından sağlanan verileri asla doğrudan başlıklara dahil etmeyin, çünkü bu e-posta başlık enjeksiyonuna yol açar.

<?php
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);

if (!$email || strlen($name) > 100 || strlen($message) > 5000) {
    die('Invalid input.');
}

$to = 'you@example.com'; // hardcoded
$subject = 'Contact form submission'; // hardcoded
$body = "Name: $name\nEmail: $email\nMessage: $message";
mail($to, $subject, $body, "From: $email\r\nReply-To: $email"); // Note: From uses user email; still potentially exploitable – better to use a library.

Daha da iyisi, Symfony Mailer veya PHPMailer gibi saygın bir posta kütüphanesi kullanın; bunlar başlıkları güvenli bir şekilde işler.

CRM ve SaaS Sistemleriyle Entegrasyon

Birçok iletişim formu, gönderimleri doğrudan bir CRM, e-posta pazarlama platformu veya yardım masasına iletir. Bu da başka bir saldırı yüzeyi oluşturur: bir saldırgan formunuza veri enjekte edebilirse, iş açısından kritik sistemlerinize de potansiyel olarak enjekte edebilir.

Kimlik doğrulamalı web kancaları kullanın

Form verilerini üçüncü taraf bir API'ye (ör. HubSpot, Salesforce, Mailchimp) gönderirken, JavaScript'te sabit kodlanmış değil, ortam değişkenlerinde saklanan API anahtarları veya OAuth token'ları kullanın. Form gönderimi önce sunucunuza gitmeli, ardından harici hizmete iletilmelidir. Bu sayede API anahtarı arka uçtan asla ayrılmaz.

Üçüncü taraf tarafında doğrulama yapın

Çoğu CRM, gelen alanlar için doğrulama kuralları belirlemenize olanak tanır. Bunları kullanın. Geçerli e-posta sözdizimi gerektirin, karakter sınırlamaları uygulayın ve şüpheli desenlere sahip gönderimleri reddedin. Ön yüz doğrulamanız başarısız olsa bile, arka uç API'si bunu yakalamalıdır.

Giden çağrıyı hız sınırlayın

Formunuz üçüncü tarafa bir API çağrısı tetikliyorsa, sunucunuzun da bu dış çağrıyı hız sınırlamasına tabi tuttuğundan emin olun. Bir spam seli, API kotanızı dakikalar içinde tüketebilir. Bir müşterimizin SendGrid hesabının, tek bir bot saldırısıyla 10.000 e-posta gönderilmesi sonucu kilitlendiğini görmüştük. Basit bir kayan pencere hız sınırlayıcı bunu önleyebilirdi.

Şifrelenmiş kanal aracılığıyla CRM ile güvenli form entegrasyonu
Sunucu tarafı aktarma ve hız sınırlama ile güvenli form-CRM entegrasyonu.

Test ve İzleme

İzlemediğiniz bir şeyi güvence altına alamazsınız. Bir iletişim formu dağıttıktan sonra, günlükleme ve uyarılar ayarlayın.

  • Her gönderim denemesini zaman damgası, IP, kullanıcı aracısı ve doğrulamayı geçip geçmediğiyle birlikte kaydedin. Günlükleri, web kullanıcısı tarafından silinemeyecek salt yazılır bir konumda saklayın.
  • Olağan dışı etkinlikler için uyarılar ayarlayın: saatte 50'den fazla gönderim, tekrarlanan 429 yanıtları veya bilinen kötü amaçlı IP'lerden gelen gönderiler (bir kara liste akışı kullanın).
  • Formunuzu OWASP ZAP gibi otomatik araçlarla test ederek enjeksiyon zafiyetleri ve CSRF zayıflıklarını kontrol edin.
  • Reddedilen gönderimleri düzenli olarak inceleyerek meşru kullanıcıların engellenmediğinden emin olun. Zaman aşımı ve honeypot eşiklerinizi periyodik olarak ayarlayın.

DigiForge'da, her üretim formuna basit bir gösterge paneline metrikler bildiren bir izleme uç noktası ekliyoruz. Bu, anormallikleri kritik hale gelmeden önce fark etmemizi sağlıyor.

Hepsini Bir Araya Getirmek: Katmanlı Bir Yaklaşım

Hiçbir önlem tek başına kurşun geçirmez değildir, ancak birkaç basit tekniği üst üste koymak zorlu bir engel oluşturur. İşte herhangi bir iş iletişim formu için önereceğimiz minimum önlemler:

  1. Tüm sitenizde HTTPS kullanın.
  2. Sunucu tarafında hız sınırlaması uygulayın (örneğin, IP başına saatte 5 gönderim).
  3. Bir honeypot alanı ve zaman kontrolü ekleyin.
  4. Her girdiyi sunucu tarafında doğrulayın ve temizleyin.
  5. CSRF tokenları kullanın (çoğu framework'te yerleşiktir).
  6. Gönderimleri şifreleyerek saklayın ve asla düz metin veri günlüğü tutmayın.
  7. Yazılımı güncel tutun — form eklentileri ve kütüphaneleri sık sık zafiyet vektörüdür.
  8. Gönderimleri izleyin ve anormalliklerde uyarı verin.

Özel bir form oluşturuyorsanız, güvenlik özelliklerini yeniden icat etmemek için yerleşik bir framework veya kütüphane kullanmayı düşünün. DigiForge'da denetlediğimiz ortalama özel PHP formu bu sekiz noktadan en az üçünden yoksundur. Bu boşlukları kapatmak bir güvenlik ekibi gerektirmez — farkındalık ve birkaç saatlik bilinçli kodlama yeterlidir.

İletişim formları, daha büyük bir güvenlik duruşunun küçük bir parçasıdır, ancak genellikle bir saldırgan için en kolay giriş noktasıdır. Onlara uygulamanızdaki diğer veri girdileriyle aynı titizlikle yaklaşın.

Mevcut formlarınızı güçlendirme veya güvenli bir gönderim hattı oluşturma konusunda yardıma ihtiyacınız varsa, ekibimizle iletişime geçin. Yüksek trafikli CRM bağlantılarından HIPAA uyumlu iletişim sistemlerine kadar her şeyi ele aldık ve öğrendiklerimizi paylaşmaktan mutluluk duyarız.

#iletişim-formları#spam-önleme#hız-sınırlama#veri-güvenliği#honeypot#csrf#şifreleme
DF

DigiForge Ekibi

DigiForge mühendislik ekibi — modern web siteleri, modules ve otomasyonlar inşa ediyor; hızlı ve dayanıklı web ürünleri yayınlama zanaatı üzerine yazıyor.

Konuşalım

Aklınızda bir proje
mi var?

Bize ne geliştirdiğinizi anlatın — ürününüz için net bir plan ve doğru yaklaşımı belirleyelim.

Projenizi başlatın