Captcha Kullanmadan Spam Yorumları Engelleme

Spam yorumları engellemek için önceden recaptcha kullanıyordum. Daha sonradan PHP'ye geçmem ile birlikte Securimage PHP Captcha uygulamasını kullanmaya başladım. Bu iki captcha uygulaması da sitemi spam yorumlardan gayet güzel bir şekilde korudu açıkcası. Ancak bu uygulamalar ziyaretçiler açısından pek kullanışlı olmuyordu. Özellikle recaptcha uygulamasındaki yazıların okunması tam bir işkenceye dönüşebiliyordu. Bu sebepten dolayı herhangi bir güvenlik resmi uygulaması kullanmadan spam yorumları nasıl engelleyebileceğimi uzun uzun araştırdım ve bulduğum çözüm yöntemlerini yorumlar kısmında denedim. Bu yöntemlerden kimisi çok güzel işe yaradı kimisi ise maalesef işe yaramadı. İşte size o işe yarayan yöntemlerin iki tanesinden bahsedeceğim.

1. Yöntem

Bu yöntem benim en mantıklı gördüğüm yöntem ve yorumlar kısmında da bu yöntemi kullanıyorum.

Spam yorumlar gönderen botlar bu yorumları otomasyona bağlı oldukları için anında gönderiyorlar. Yani bir insan gibi yorum yazarken belli bir süre harcamıyorlar. Yaptığım denemeler sonucunda ise bir insan yorum yazarken en azından on saniye harcıyor. İşte bu mantıkla yola çıkarak eğer yorumu yazan kişi on saniyeden kısa sürede yorumu yazmış ise spam yorum yazan bot olduğuna kanaat getiriyoruz. İsterseniz bu yöntemi uygulama üzerinde inceleyelim. İlk önce yorumların yazıldığı formumuza sayfanın açıldığı zamanı tutan hidden input ekleyelim.

<input type="hidden" name="visit_time" value="<?php echo time(); ?>">

Ziyaretçinin sayfayı ne zaman açtığını öğrendik. Şİmdi ise ziyaretçi yorumu yazıp Gönder butonuna tıkladığındaki zaman ile sayfanın açıldığı zaman arasında ne kadar saniye fark olduğunu hesaplayalım.

$date1 = $_POST['visit_time']; //Formdan gelen zaman değeri
$date2 = time(); //Şimdiki zaman
$subTime = $date2 - $date1; //İki zaman arasındaki fark

Son olarak aradaki farkın on saniyeden az veya fazla olmasına göre işlemimizi yapalım.

if ($subTime < 10)
{
    echo "Spam yorum algılandı.";
}
else
{
    //Yorumu veritabanına kaydedebiliriz.
}

2. Yöntem

2. yöntemde ise formumuza fazladan bir adet input ekliyoruz ve bu input'u görünmez yapıyoruz. Ziyaretçi eğer bu gizli input'u doldurursa spam yorum yazan bot olduğuna kanaat getiriyoruz. Bu yöntemde dikkat etmemiz gereken nokta input'u javascript aracılığıyla gizli hale getirmek. Çünkü botlar genellikle javascript kodlarını tanımıyor. İlk önce formumuza input'u ekleyelim.

<p class="input-test">
    <label for="web_url">Lütfen bu alanı doldurmayınız!</label>
    <input type="text" name="web_url" id="web_url">
</p>

Daha sonra css kodumuzda input'u gizleyecek bir class oluşturalım.

.hidden { display: none; }

Ve javascript aracılığıyla input'u gizleyelim.

jQuery(document).ready(function ($) {
    $('.input-test').addClass('hidden'); //input-test sınıflı nesnemize hidden sınıfını ekledik.
}

Son olarak boş bırakılması gereken input'un dolu olup olmadığına bakalım.

if (strlen($_POST['web_url']) > 0)
{
    echo "Spam yorum algılandı.";
}
else
{
    //Yorumu veritabanına kaydedebiliriz.
}

Sonuç

Her iki yöntemi de uzun süre uyguladım ve tek bir spam yorumla karşılaşmadım. Yöntemlerden hangisini uygulayacağınız kararı ise size kalmış. Dilerseniz iki yöntemi de aynı anda uygulayabilirsiniz.

YORUMLAR (9)
  1. Kenan
    Kenan - Cevapla
    Çok güzel bir yöntem, bu kodları nereye ekleyeceğimizide belirtseydiniz süper olurdu, kendi siteme uygulayamadım.
    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla
      HTML etiketlerini formda gerekli yerlere, PHP kodlarını ise formu doğruladığımız PHP kodlarının bulunduğu kısma yazıyoruz.
  2. Misafir
    Misafir - Cevapla
    Teşekkürler. Çok faydalı oldu. Captcha hazırlama derdinden kurtuldum şimdilik.
  3. Volkan
    Volkan - Cevapla
    2.Yöntemde .hidden { display: none; } kodunu nereye ekleyeceğiz? hidden olarak tanımlı css yok ki? css içine input-test oluşturup onun altına mı ekleyeceğiz?
    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla
      css kodlarımızı yazdığımız yerde hidden isimli bir class oluşturuyoruz. JavaScript ile de sayfa yüklendiğinde input-test sınıfındaki input ve label'a hidden sınıfı da eklenerek ziyaretçiye görünmüyor.
      • Volkan
        Volkan - Cevapla
        İkinci Yöntemde Yanlış Bir şeyler Var Çalışmıyor. Kontrol Değerini "0" Belirlemişsiniz Fakat Bunu Sorgulayacak Başka Bir Değer Yok Kodlarda. Şu linkteki konuyu inceler misiniz; https://serdarakyol.com/php-spam-mail-engelleme/
        • Mehmet YAYLACI
          Mehmet YAYLACI - Cevapla
          Kontrol değerini değil input değerinin uzunluğunu sınıyoruz. Eğer uzunluğu sıfırdan büyükse, yani input doldurulmuş ise spam olduğu kanısına varıyoruz. Çünkü o input ziyaretçilere görünmüyor.
          • Volkan
            Volkan - Cevapla
            Anladım hocam teşekkürler. Spamlar azaldı fakat tam çözüm olmadı. Gönder butonuna basınca ekrana açılr bir pencereyle ikinci bir onay ekranı açsam "gönderiyi onaylıyormusunuz gibi" bu çözüm olur mu yoksa botlar bunu da tanır mı?
            • Mehmet YAYLACI
              Mehmet YAYLACI - Cevapla
              Botları %100 engellemek gerçekten zor. İsterseniz şu an benim de aktif olarak kullandığım ve çok memnun kaldığım Akismet hizmetini kullanabilirsiniz. Eğer bir Wordpress siteniz varsa zaten Akismet eklentisi kurulu geliyor. Siz sadece aktif hale getiriyorsunuz. Eğer özel yazılım kullanıyorsanız PHP ile Akismet API Kullanarak Spam Yorumları Engelleme isimli yazıyı inceleyebilirsiniz.
YORUM FORMU