Спам в WordPress – Как да го преборим?
Публикувано на 18 април, 2010, в CMS.
Всеки, който има публичен wordpress блог, е срещал проблема наречен спам. Става дума за спам ботове, които автоматично публикуват коментари с линкове към сайтове на собственика на бота. Как можем да се справим с този проблем?
Естествено има много начини. Примерно може просто да не одобрявате тези спам коментари, или да си инсталирате плъгини, които по един или друг начин ще премахнат повечето спам. Някои дори може и да премахнат всичкия спам. Не всички плъгини обаче са достатъчно добре направени и някои може да доведат до различни проблеми или до по-голямо натоварване на вашият сървър или просто да не се справят със всичкия спам.
За това тук ще ви представя един начин за напълно премахване на спама в wordpress, без да инсталирате допълнителни плъгини и без да предизвиквате допълнително натоварване на сървъра. От както го въведох в моите блогове, не съм имал нито един спам коментар, а преди в някои сайтове имах десетки на ден.
Това, което ще направим е да добавим ново поле във формуляра за коментар, където ще зададем въпрос, чийто отговор знаят само хората, а спам ботовете не могат да разберат.
Няма как обясненията, които ще дам, да са напълно конкретни, понеже доста неща зависят от темата, която използвате, но ще се опитам да бъде максимално ясно обяснено. Ето какво трябва да направите:
1. Отидете в админ панела на вашият wordpress блог и от там отворете за редакция файлa на вашата тема, в който се намира кодът на формуляра за публикуване на коментари. Най-често този файл се казва comments.php, но в някои теми може и кодът да е във single.php или в друг файл.
2. Изберете място където да добавите ново поле за попълване. Примерно преди кутииката за попълване на текста на самия коментар. В html код тя ще започва със знак за по-малко и думата textarea, тоест може да потърсите със find на вашият браузър (ctr + f) за <textarea. Възможно е преди тази фраза да има таг за параграф (<p>) или за нов ред (<br />). Тогава ще добавите нашият код преди тях.
Тук има една особеност и тя е че трябва новото поле да е видимо, както за регистрирани и логнати потребители, така и за гости. Огледайте се за този ред: <?php if ( $user_ID ) : ?> и за този ред: <?php endif; ?>. Ако мястото, на което ще добавяте нашето ново поле е след първия ред и преди втория, то изберете друго. За това и по-горе предложих да е точно преди <textarea.
3. След като сте избрали място за новото поле (примерно преди <p><textarea) поставете следния код:
<p>
<label for="chislo">
Колко дни има в една седмица?
<input type="text" name="chislo" id="chislo" />
</label>
</p>
Може да промените малко кода, ако знаете какво правите, но най-важното е наличието на следното:
Колко дни има в една седмица?
<input type="text" name="chislo" id="chislo" />
4. Сега след като сте добавили горния код и сте запазили файла, би трябвало да виждате ново поле във формуляра за публикуване на коментар, който е под всяка ваша публикация. Можете да си го оформите с css за да изглежда както останалите полета, като първо видите във css файла как са оформени те. Ако не знаете какво е css игнорирайте това.
5. Следва да добавим едно съобщение, което ще се показва ако е въведен грешен отговор на нашия въпрос. Ще използваме малко JavaScript код поставен вътре в тага на бутона за изпращане на коментара. За да намерите бутона, потърсете за type="submit". Преди или след тази фраза добавете следния код, като оставите по едно празно място от двете му страни:
onmousedown="javascript: var bla=document.getElementById('chislo').value; if(bla!=7) alert('Въвели сте грешно число!');"
Обърнете внимание на следната част: alert('Въвели сте грешно число!'). Ако искате да се показва друго съобщение, можете да промените изречението в единичните кавички. Сега кода на бутона за изпращане ще изглежда нещо подобно (но не същото, понеже зависи от темата) на това:
<input name="submit" onmousedown="javascript: var bla=document.getElementById('chislo').value; if(bla!=7) alert('Въвели сте грешно число!');" type="submit" id="submit" value="Изпрати" />
6. И на края трябва да редактираме файлът, който обработва изпращането на коментарите. Той се намира в главната директория на вашият блог и се казва wp-comments-post.php. Него няма да можете да редактирате от админ панела, понеже не е част от темата. Влезте чрез ftp програма или през файл мениджър и изтеглете този файл.
В самото начало на файла след следния ред:
<?php
добавете тези редове:
if(isset($_POST['chislo']) && $_POST['chislo']==7)
{
В края на файла точно преди реда:
?>
добавете тези редове:
}
else
{
echo "<p><center>Не сте въвели отговора на въпроса: <b> Колко дни има в една седмица?</b></p><p>Натиснете Back бутона на вашият браузър.</p></center>";
}
Запазете файла и го качете на мястото на стария. Сега вече няма да бъде изпращан коментар, освен ако числото написано в нашето поле, което добавихме, не е 7. Можете да замените въпроса с друг и съответно да промените отговора да бъде друго число. Просто навсякъде където има числото 7 в редовете по-горе, сложете новото число. Само не използвайте въпроси от сорта на: Колко е 2 + 3?, понеже някои спам ботове виждат числата и знака за събиране и извършват операцията. Също имайте предвид че ако сменяте темата или ъпдейтвате блога, ще трябва да направите тези промени отново.
Общо взето това е. Ако има нещо неясно обяснено или объркано, моля пишете един коментар по-доло и ще го поправя.
7 коментара по "Спам в WordPress – Как да го преборим?"
admin на 18 април, 2010
Здравей
Да се проверява реферара водещ към wp-comments-post.php ли? То няма ли да е пак URL-a na самата статия? Не съм много запознат с този метод, би ли пояснил
А относно ъпдейта, добавих че трябва да се прави наново при ъпдейт. То тогава предполагам се заменя файла wp-comments-post.php с нов.
Васил Тошков (http://cloxy.com) на 19 април, 2010
Повечето роботи, които спамят, го правят от далече, като директно подават POST параметрите към wp-comments-post.php и следователно няма реферал или той е различен от основния домейн. Идеята ми е да се проверява дали има реферал и само ако има такъв и той е от същия хост (HTTP_HOST), тогава да се пуска съобщението.
admin на 19 април, 2010
Аха, ясно ![]()
Добра идея. Обаче ако бота просто влезе в нашия сайт и там попълни формата, то тогава ще успее нали? Или те не правят така?
BullBlogger (http://www.bullblogger.info) на 19 април, 2010
Много готина статия. Доста по-добро решение от капча (Тошков е абсолютно прав, че юзърите мразят капчите) и същевременно достатъчно лесно за реализиране.
М дa наясно съм, че коментара ми не е много градивен ама не можах да се стърпя да не ти пробвам новата форма за коментари
admin на 19 април, 2010
@BullBlogger
Ами той май имаше предвид че този вариант си е капча (и е прав) и че потребителите го мразят. Но не мисля че това би спряло някой, който иска да публикува коментар ![]()
Иначе да, това е по-лесно от нормалните капчи, дето в някои дори едвам се разчитат многобройните малки и големи букви и цифри
az на 20 април, 2010
@Васил Тошков
не е проблем бота да добавя автоматично хедър с реферер за всеки сайт който спами. Напр, за този тука просто ще има реферер:http://webstatii.com и тн.
Васил Тошков (http://cloxy.com) на 18 април, 2010
Не е ли по-лесно да проверяваш дали хоста от реферера е равен на техущия хост? Потребителите се спъват и от най-малките капчи, така че трябва да се избягва да се тормозят излишно.
При твоя случай трябва да се внимава, като се направи автоматичен ъпдейт на системата, да не се блокират коментарите.