jekcms'te bir yorum gönderildiğinde hangi kontrollerden geçiyor, spam puanı nasıl hesaplanıyor, hangi yorum yayımlanıyor, hangisi onaya düşüyor ve kime bildirim gidiyor. Gönderimden yayına kadar akışı adım adım anlatıyoruz.
Yorum formu bir metin kutusu ve bir düğmeden ibaret görünür. Asıl iş düğmeye basıldıktan sonra başlıyor. Açık bir yorum formu kısa sürede botların hedefi oluyor ve önlem alınmazsa onay kuyruğu kumar, ilaç ve kripto bağlantılarıyla doluyor. Bu yazıda jekcms'te bir yorumun gönderildiği andan yayımlanmasına kadar geçtiği adımları anlatıyoruz.
Gönderim Sırasındaki Kontroller
Yorum veritabanına yazılmadan önce sırayla şu kontrollerden geçiyor:
- İstek sınırı: Aynı IP adresinden dakikada en fazla 3 yorum kabul ediliyor. Bunun üstünde IP başına saatlik ve günlük, site geneli için de saatlik bir tavan var.
- Bal küpü ve süre: Formda insanların görmediği gizli bir alan var; bot bu alanı doldurursa yorum kaydedilmiyor. Form açıldıktan sonra çok kısa sürede gönderilen yorumlar da şüpheli sayılıyor.
- CSRF anahtarı: Formun sitenin kendi sayfasından gönderildiği doğrulanıyor.
- reCAPTCHA: Ayarlardan yorumlar için açıldıysa Google'ın doğrulama servisine soruluyor.
- Alan kontrolleri: Ad 2 ile 100 karakter arasında olmalı, e-posta geçerli olmalı, yorum 3 ile 5000 karakter arasında olmalı.
- Yazının durumu: Yorumlar site genelinde ya da o yazıda kapalıysa veya yorum için giriş zorunluysa gönderim reddediliyor.
Botlara hiçbir ipucu verilmiyor. Bal küpüne takılan ya da tavanı aşan bir istek de "Yorumunuz alındı" yanıtı görüyor ama veritabanına hiçbir şey yazılmıyor.
Spam Puanı
Bu kontrollerden geçen yorum spam süzgecine gidiyor. Süzgeç tek bir karar vermiyor, her şüpheli işaret için puan ekliyor ve nedenini not ediyor. Başlıca işaretler şunlar:
- Kara listedeki IP adresi ya da e-posta (doğrudan reddedilecek kadar puan)
- İzin verilenden fazla bağlantı (varsayılan sınır 2)
- İlaç, kumar, yetişkin içerik ve kripto dolandırıcılığına ait kelimeler
- Adın içinde bağlantı, rastgele harflerden oluşan ad ya da e-posta kullanıcı adı
- Tamamı büyük harf, tekrar eden karakter ya da kelimeler, yorumun içinde script veya iframe etiketi
- Kısaltılmış bağlantılar (bit.ly, tinyurl ve benzerleri)
- Boş ya da bilinen bot istemcilerine ait tarayıcı kimliği
- Aynı IP'den son 24 saatte üç ve üzeri spam denemesi
Bunların üzerine ikinci bir katman daha çalışıyor. Bu katman site dili ile yorumun yazıldığı alfabe uyuşmuyor mu, aynı metin farklı adlarla gönderilmiş mi, "yazılarınızı çok beğendim" türünden hazır spam kalıpları var mı, harfler benzer görünen başka alfabelerden mi seçilmiş, geçici e-posta adresi mi kullanılmış diye bakıyor. Ayrıca yöneticinin kararlarından öğrenen bir Bayes modeli var: panelde bir yorumu spam olarak işaretlediğinizde ya da onayladığınızda model buna göre güncelleniyor. İsterseniz StopForumSpam ve Akismet itibar kontrolleri de açılabiliyor.
Puana Göre Karar
Toplam puan yorumun ne olacağını belirliyor:
if ($score >= 100) {
$action = 'reject'; // sessizce reddedilir
} elseif ($score >= $autoSpamThreshold * 10) {
$action = 'spam'; // spam olarak ayrılır
} elseif ($score >= 20) {
$action = 'pending'; // onaya düşer
}
// aksi halde: sitenin varsayılan yorum durumu
Otomatik spam eşiği ve bağlantı sınırı panelde Spam Koruması ekranından değiştirilebiliyor. Reddedilen ya da spam sayılan yorumlar yorum tablosuna yazılmıyor, yalnızca spam kaydına düşüyor. Böylece saldırı altındaki bir sitede bile yorum tablosu şişmiyor. Puanı sıfırın üstünde olup yine de kaydedilen yorumlarda puan ve nedenler yorumla birlikte saklanıyor; moderasyon ekranında bir yorumun neden onaya düştüğünü görebiliyorsunuz.
Moderasyon
Panelde Yorumlar ekranı bekleyen, onaylı, spam ve çöp kutusu sekmelerine ayrılıyor. Yorumları tek tek ya da toplu olarak onaylayabilir, spam olarak işaretleyebilir veya silebilirsiniz. Spam ve onay kararları Bayes modelini eğittiği için süzgeç zamanla sitenize özgü spam türlerini daha iyi tanıyor. Bekleyen yorumları güncel kurallarla yeniden taramak için Spam Koruması ekranında bir düğme de var.
Yorumların varsayılan olarak hemen mi yayımlanacağı yoksa onaya mı düşeceği Ayarlar > Tartışma ekranından seçiliyor. Aynı ekranda yorumları tamamen kapatabilir ya da yorum yapmayı giriş yapmış kullanıcılarla sınırlayabilirsiniz.
Bildirimler
İki bildirim türü var ve ikisi de varsayılan olarak kapalı:
- Yöneticiye yeni yorum bildirimi: Yorumun adı, e-postası, metni ve moderasyon ekranının bağlantısı yönetici e-posta adresine gidiyor.
- Yanıt bildirimi: Onaylanmış bir yoruma yanıt geldiğinde, yanıtlanan kişiye ve üstteki yorumların sahiplerine e-posta gidiyor. Her e-postada bildirimleri kapatma bağlantısı var; kapatan kişiye bir daha yazılmıyor.
Yönetici panelden bir yoruma yanıt verdiğinde kendisine "yeni yorum" e-postası gitmiyor, yalnızca yanıt bildirimi çalışıyor.
Temalarda Yorumlar
Yorum listesi ve formu temanın yazı sayfasında gösteriliyor. Form, girişli kullanıcıda ad ve e-postayı oturumdan alıyor. JavaScript kapalıyken de çalışıyor: gönderimden sonra ziyaretçi yazıya geri dönüyor ve bir hata varsa form alanına yönlendiriliyor. Onaylanan yorum yazının yorum sayısını güncelliyor ve sayfa önbelleğini temizliyor, böylece yorum hemen görünüyor.