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 (11)
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/