Merhaba. Daha önceden captcha kullanmadan spam yorumları nasıl engelleyebileceğimizi yazmıştım. Ancak bazı spam kaynaklarının tahminimce manuel olarak yorum yazması bu önlemi de aştı maalesef. Daha sonra tekrar reCaptcha kullandım. Ancak bu yöntemin de aşıldığını gözlemledim. Bunun sonucunda artık daha kökten bir çözüm bulmam gerekiyordu ve wordpress sitelerde kullanılan Akismet'i kendi blog sistemimde kullanmaya karar verdim. Akismet wordpress siteleri spam yorumlara karşı koruyan bir hizmettir. Ancak bu hizmet sadece wordpress siteler için değil, diğer platformlar için de kullanılabilmektedir.
Akismet'i PHP ile kodlanmış blog sistemimde kullanmak için aşağıdaki metodu kullanıyorum. Bu metotta ilk önce data isimli bir dizi oluşturuyoruz. Bu dizi içerisinde spam olup olmadığı kontrol edilecek yoruma ait bilgiler yer alıyor. Daha sonra Akismet'ten aldığımız api key'i belirtiyoruz. Bu iki bilgiyi akismet_comment_check isimli metotta kullanarak bir cURL isteği oluşturuyoruz. Bu istek sonucunda Akismet tarafından bize bir cevap geliyor. Eğer cevap true ise yorum spam olarak işaretlendi demektir. Cevap false ise yorumumuzda herhangi bir spam içeriğe rastlanmamış demektir. Eğer siz de bu metodu kullanacaksanız data isimli dizi içerisindeki bilgileri ve api key'inizi değiştirmeyi unutmayınız.
<?php
$data = array(
'blog' => 'https://mhmtyylc.tr',
'user_ip' => $_SERVER['REMOTE_ADDR'],
'user_agent' => $_SERVER['HTTP_USER_AGENT'],
'referrer' => $_SERVER['HTTP_REFERER'],
'permalink' => $_POST['permalink'],
'comment_type' => 'comment',
'comment_author' => $_POST['comment_author'],
'comment_author_email' => $_POST['comment_author_email'],
'comment_author_url' => $_POST['comment_author_url'],
'comment_content' => $_POST['comment_content']
);
$key = 'akismet_api_key_buraya';
function akismet_comment_check($key, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'mhmtyylc.tr | Akismet/1.1');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'https://' . $key . '.rest.akismet.com/1.1/comment-check');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$result = akismet_comment_check($key, $data);
if ($result == 'true')
{
//Spam yorum algılandı.
}
else
{
//Yorum temiz olarak algılandı.
}
?>