WordPress Spam Yorumları Engelleme

WordPress kullanıcıları için spam yorumları engellemek oldukça sorunlu bir iş. Bunun için kullanılan eklentiler mevcut, ancak ne kadar çok eklenti, o kadar çok server load anlamına gelir. Server load demek, sitenizin bulunduğu hosting firmasının hiç hoşlanmayacağı bir şeydir ki, server load sorunu sitenizin kapatılmasına bile yol açabilir.

Daha önce burada anlatılan yöntem ile spam yorumlardan korunuyorduk, ancak bir spammer bizim site ile uğraşmış sanırım ve bu kodu çözmüş. Kutucuk işaretleyip yorumu gönder diyordunuz. Aslında basitti ama çok işe yaramıştı. Kodun ilk sahibi de zaten birisi bunu çözebilir diyordu ve bu oldu. Kodu çözdükten sonra spammer bilgisayar saatte 300 spam yorum yazmaya başlamıştı. Server load değeri 100’den aşağı inmiyordu. Site neredeyse görüntülenmeyecek hale gelmişti ki, Akısmet eklentisini kurdum. Akısmet oldukça işe yaradı. Spammer tam zamanında kırmıştı, zaten yeni tema yapıyordum. Tamam konumuza geri dönüyorum. Yaklaşık 3 gün 3 gece aralıksız çözüm denedim, aradım. Spammer sitenin kodlarından yola çıkıyordu. Yani yorum yapılan alanda formların class ve idlerinde yazan html kodlarından bu alanın bir yorum alanı olduğu anlıyordu. Düz mantık, bu alanların isimlerini değiştirirsem ne olur. Tema klasörü içindeki comments.php dosyasını açın, her hangi bir kod editör, düzenleme programı ile. Aşağıdaki kodların yazılı olduğu yeri bulun.

<form action=“<?php echo get_option(‘siteurl’); ?>/wp-comments-post.php” method=”post” id=”commentform“>

<?php if ( $user_ID ) : ?>

<p>Logged in as <a href=”<?php echo get_option(‘siteurl’); ?>/wp-admin/profile.php”><?php echo $user_identity; ?></a>. <a href=”<?php echo wp_logout_url(get_permalink()); ?>” title=”Log out of this account”>Log out &raquo;</a></p>

<?php else : ?>

<p><input type=”text” name=”author” id=”author” value=”author” size=”32″ tabindex=”1″ <?php if ($req) echo “aria-required=’true'”; ?> />
<label for=”author”><small>Name <?php if ($req) echo “(required)”; ?></small></label></p>

<p><input type=”text” name=”email” id=”email” value=”email” size=”32″ tabindex=”2″ <?php if ($req) echo “aria-required=’true'”; ?> />
<label for=”email”><small>Mail (will not be published) <?php if ($req) echo “(required)”; ?></small></label></p>

<p><input type=”text” name=”url” id=”url” value=”site” size=”32″ tabindex=”3″ />
<label for=”url”><small>Website</small></label></p>

<?php endif; ?>

<p><textarea name=”comment” id=”comment” cols=”” rows=”10″ tabindex=”4″ style=”width:95%; display:inline;”></textarea></p>

<p><input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”Submit Comment” />
<?php comment_id_fields(); ?>
</p>
<?php do_action(‘comment_form’, $post->ID); ?>

</form>

Bu kodlar tüm temaların comments. php dosyalarında aynıdır. comments.php ne yapar? Yorumlar için bir form alanı oluşturur ve içine yazılanları asıl çekirdek yorum dosyası olan wp-comments-post.php dosyasına gönderir. comments.php içindeki alanlar ile wp-comments-post.php dosyasında tanımlıdır, yani eşleşir, eşleşmezse yorum gönderilmez, hata verir. Spammer bunu bildiği için bu alanların html kodlarına göre hazırlanmış spamlar hazırlarlar. Biz bu alanları, yani comments.php ve wp-comments-post.php doslarındaki alanları aynı şekilde değiştirirsek ne olur? O zaman spammer sadece bizim sitemiz için özel olarak bir spam geliştirmesi gerekebilir. Bu fikir benim değil, yabancı bir inter sitesinde gördüm. Mantıklı geldi. Denedim, şöyle.

<form action=“<?php echo get_option(‘siteurl’); ?>/wp-comments-post.php” method=”post” id=”superman“>

<?php if ( $user_ID ) : ?>

<p>Logged in as <a href=”<?php echo get_option(‘siteurl’); ?>/wp-admin/profile.php”><?php echo $user_identity; ?></a>. <a href=”<?php echo wp_logout_url(get_permalink()); ?>” title=”Log out of this account”>Log out &raquo;</a></p>

<?php else : ?>

<p><input type=”text” name=”neo” id=”neo” value=”neo” size=”32″ tabindex=”1″ <?php if ($req) echo “aria-required=’true'”; ?> />
<label for=”neo”><small>Name <?php if ($req) echo “(required)”; ?></small></label></p>

<p><input type=”text” name=”kus” id=”kus” value=”kus” size=”32″ tabindex=”2″ <?php if ($req) echo “aria-required=’true'”; ?> />
<label for=”kus”><small>Mail (will not be published) <?php if ($req) echo “(required)”; ?></small></label></p>

<p><input type=”text” name=”ucak” id=”ucak” value=”ucak” size=”32″ tabindex=”3″ />
<label for=”ucak”><small>Website</small></label></p>

<?php endif; ?>

<p><textarea name=”tarla” id=”tarla” cols=”” rows=”10″ tabindex=”4″ style=”width:95%; display:inline;”></textarea></p>

<p><input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”yorumu vınla” />
<?php comment_id_fields(); ?>
</p>
<?php do_action(‘comment_form’, $post->ID); ?>
</form>

 

comment kelimesi bırakmadım, ne olur ne olmaz. Sıra geldi wp-comments-post.php dosyasını düzenlemeye. Alanlar zaten belli isimlerini aynı yapacağım.

$comment_author = ( isset($_POST[‘author’]) ) ? trim(strip_tags($_POST[‘author’])) : null;
$comment_author_email = ( isset($_POST[’email’]) ) ? trim($_POST[’email’]) : null;
$comment_author_url = ( isset($_POST[‘url’]) ) ? trim($_POST[‘url’]) : null;
$comment_content = ( isset($_POST[‘comment’]) ) ? trim($_POST[‘comment’]) : null;

Yaklaşık 50. satırda, burayı bulunca aşağıdaki gibi değiştirdim.

// spam lutfen gelme
$comment_author = ( isset($_POST[‘neo’]) ) ? trim(strip_tags($_POST[‘neo’])) : null; //author yazan yer
$comment_author_email = ( isset($_POST[‘kus’]) ) ? trim($_POST[‘kus’]) : null; // email alanı
$comment_author_url = ( isset($_POST[‘ucak’]) ) ? trim($_POST[‘ucak’]) : null; // site alanı
$comment_content = ( isset($_POST[‘tarla’]) ) ? trim($_POST[‘tarla’]) : null; // yorum alanı

Bu şekilde değiştirdikten sonra, siteye tekrar geri yükledim, denedim, css sorunları oldu, çünkü id ve class isimlerini değiştirdim. style.css dosyasını açtım, eski class ve id isimlerini de aynı şekilde değiştirdim. Yorum alnının görüntüsü bozulmadı.

Bu yaptıklarım beni tatmin etmedi. Spammer işi gücü bırakmış bizim bir kutucuğumuza gözü dikmişti. Bir java kodunu uyarladım, basit bir matematik işlemi yapmadan gönder butonu aktif olmuyor. Java script dosyasının içeri şöyle:

var a = Math.ceil(Math.random() * 10);
var b = Math.ceil(Math.random() * 10);
var c = a + b
function DrawBotBoot()
{
document.write(“Bu ne “+ a + ” + ” + b +” ? “);
document.write(“&nbsp;&nbsp;&nbsp;<input id=’BotBootInput’ type=’text’ maxlength=’2′ size=’2′ name=’hvf’/>”);
}
function ValidBotBoot(){
var d = document.getElementById(‘BotBootInput’).value;
if (d == c) return true;
(alert(“Wrong Code”));
document.getElementById(‘BotBootInput’).focus();
return false;
}

DrawBotBoot()
Bu kodları js uzantılı olarak kayıt edin. Bunu yorum butonuna şöyle uyarlayın.

<script language=”Javascript” type=”text/javascript” src=”dosyanın bulunduğu yer/javakodu.js”></script>

<input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”Gönder” onClick=”return ValidBotBoot();”/>

Geri izleme spamlarını engellemek için ilk olarak sitenizdeki ayarlar+tartışma kısmından geri izlemeleri kapatın.

Tüm bunlardan sonra bir şey daha yapmanız gerek, ne olur ne olmaz, phpmyadmin paneli açın. sql sekmesine tıkların sıra ile aşağıdaki kodları oradaki alana yapıştırın ve çalıştırın. Git butonuna tıklamanız gerek.

UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'post'; UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'page'; 

Bu kodlar sayesinde siteniz yazıların hepsini pinglere kapatıyorsunuz. Pingler önemsiz değil, önemli, ancak spamların engellenmesinden daha önemli değiller.

Yaklaşık 24 saatir bir tane bile spam yok. Spamları engelleme konusunda umarım her kesin işine yarar, yazım hataları için kusura bakmayın, iyi şanslar.

bir düzeltme yapılmalı

bir değişiklik yapmak gerekiyor, java dosyasını en altına bu satırı ekleyin:

document.write(‘<input name=”submit” type=”submit” id=”submit”  tabindex=”5″ value=”Cevapla” onClick=”return ValidBotBoot();”/>’);

comments.php dosyasından bu satırı silin.

<input name=”submit” type=”submit” id=”submit” tabindex=”5″  value=”Cevapla” onClick=”return ValidBotBoot();”/>

tuna

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir