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 { displaynone; }

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.

Mehmet YAYLACI
YORUMLAR (2)
  1. Kenan
    Kenan - Cevapla

    23 Eylül 2017 - 12:27

    Çok güzel bir yöntem, bu kodları nereye ekleyeceğimizide belirtseydiniz süper olurdu, kendi siteme uygulayamadım.

    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla

      23 Eylül 2017 - 13:53

      HTML etiketlerini formda gerekli yerlere, PHP kodlarını ise formu doğruladığımız PHP kodlarının bulunduğu kısma yazıyoruz.

YORUM FORMU