Ефективний захист блогу від спаму в Wordpress
Мені щодня приходить близько 10-30 коментарів, з них більшість - спам (90%), мене це дуже сильно дістало! Akismet не рятує, пропускає спам як решето, а іноді і нормальні коментарі поміщає в спам! Взагалі працює огидно!
Ставив і інші плагіни для Wordpress, які використовували загальну базу спамерів або які вписували куки. У першого глючила база, у другого не ставилися куки!
Днями, Григор'єв Олег aka vasa_c затіяв боротьбу зі спамерами і написав статтю Антиспам своїми руками . І тільки після цього, я вирішив теж почати боротьбу зі спамерами, і всетаки знайшов активну спам-захист! Тепер в блог не проходять спам-повідомлення, взагалі не одного!
У чому ж секрет? Приступимо ...
теорія
У теорії ми просто перейменовуємо нормальні поля форми, створюємо фейковий поля для різних спамерських пошукових роботів і приховуємо їх, що б тільки спам-боти могли їх заповнити, а людина їх не побачить. Далі перевіряємо, якщо заповнені фейковий поля - то помічаємо як спам або зовсім не додаємо ці коментарі!
У теорії це годиться для будь-якого сайту, а зараз розповім докладніше про практичну частину застосовної до Wordpress!
Практика
Вносимо правки в тему вордпресс
Правимо форму у вашій wordpress-темі (файл comments.php):
- перейменовуємо "input з Емайл" з "email" в "WoRd1"
- створюємо новий "input" і називаємо його "email"
- Перейменовуємо "textarea" з ім'ям "comment" в "WorD2"
Тепер треба приховати створений нами фейковий input "email", але не через type = hidden, бо можуть помітити боти, а через CSS-стиль (важче ботам, навряд чи вони будуть паритися).
#emailh {display: none; }Вносимо правки в обробник коментарів
Далі, відкриваємо файл wp-comments-post.php і додаємо в самому початку файлу наші створені і змінені поля на обробку.
<? Php / ** * Handles Comment Post to WordPress and prevents duplicate comment posting. * * @Package WordPress * / // підміняти comment (textarea) $ _POST [ 'comment'] = $ _POST [ 'WoRd2']; // підміняти email і якщо заповнене поле "email", помічаємо "автора" як "author_name [SPAM]". // Тут ви можете викликати return; або exit; наприклад! $ _POST [ 'author'] = empty ($ _ POST [ 'email'])? $ _POST [ 'author']: $ _POST [ 'author']. ' [SPAM] '; $ _POST [ 'email'] = $ _POST [ 'WoRd1'];Ось і все, антиспам захист готова!
Я протесту це рішення протягом 3-х днів, НЕ ОДНОГО спам Коментар!
upd: Протягом 1 місяця і 7 днів раніше НЕ ОДНОГО спам Коментар!
upd: Протягом 1-го року і 1-го дня по колишньому НЕ ОДНОГО спам Коментар!
Lt;?
POST [ 'author'] = empty ($ _ POST [ 'email'])?