[WordPress技术] WordPress 如何有效应对垃圾评论?

[复制链接]
查看: 473|回复: 0

9

主题

9

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2021-1-7 10:16:49 | 显示全部楼层 |阅读模式
网上介绍的方法好多,有换成第三方评论的(如Disqus、多说),有加验证码的,插件(Akismet、NoSpamNX、WP Anti Spam、JQ Spam……)、直接禁止无中文或者有日文的评论、直接禁止无头像的评论者提交评论、ajax 提交评论+删除 wp-post-comment.php 文件……八仙过海各显神通。 下面列几个效果还不错的方法:

方法一:对 .htaccess 下手(Apache)
1、V2EX @Mihuwa 18楼提供据说是 WordPress 官网的做法——对 .htaccess 下手,针对的是采用 POST 提交评论的方式,据说还能防暴力破解后台。
  1. # Stop spam attack logins and comments
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteCond %{REQUEST_METHOD} POST
  5. RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php*
  6. RewriteCond %{HTTP_REFERER} !.*xxx.com.* [OR]
  7. RewriteCond %{HTTP_USER_AGENT} ^$
  8. RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
  9. </ifModule>
复制代码
如果是 Nginx 使用下面的代码:
  1. location ~* (wp-comments-posts|wp-login).php$ {
  2.         if ($http_referer !~ ^(http://xxx.com) ) {
  3.                 return 405;
  4.         }
  5. }
复制代码
2、加强版,直接禁止访问 wp-post-comment.php 文件(前提是已经开启 ajax 提交评论,否则谁也提交不了评论):
  1. <Files wp-comments-post.php>
  2. Require all denied
  3. </Files>
复制代码
代码丢到 .htaccess 里面 WordPress 伪静态代码前即可。

nginx 使用下面代码:
  1. location =/wp-comments-post.php { deny all;}
复制代码

方法二:拦截新访客无中文或有日文垃圾评论、禁止在黑名单上的新访客提交评论代码合集见:无需插件实现拦截无中文或有日文垃圾评论 文末,这个效果一般,对 POST 方式的垃圾评论无效,主要是防部分人肉的垃圾评论。

代码收集自网络,部分出处不知道是哪个了。直接拒绝 WordPress 黑名单评论的发表


方法三:ajax 提交评论+删除/清空 wp-post-comment.php 文件
ajax 提交评论可看大发的教程:WordPress Ajax 评论提交,这种方法原理和第一种方法一样,主要是防止机器人用 POST 方式通过 wp-post-comment.php 提交评论。

方法四:彻底禁止所有文章和页面的 pingback 和 trackback
这个方法只对 pingback 和 trackback 有效,并且是正常的也拦截了。phpMyAdmin 执行以下 MySQL 语句(注意数据表前缀)。
  1. UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'post';
  2. UPDATE wp_posts SET ping_status='closed' WHERE post_status = 'publish' AND post_type = 'page';
复制代码

方法五:通过 Javascript 抓取使用脚本自动填写提交的评论(垃圾评论)
方法为 Leona+ 博主原创:屏蔽来自网页端的垃圾评论,详细介绍请看原文。下面是转贴代码:

Leona+ 原版:(不支持 pingback/trackback)
  1. $leonax_magic_lower = 328;
  2. $leonax_magic_upper = 3450709;
  3. function leonax_anti_spam_form($fields){
  4.     global $leonax_magic_lower, $leonax_magic_upper;
  5.     $leonax_magic = mt_rand($leonax_magic_lower, $leonax_magic_upper);
  6.     $fields['leonax_magic'] = <<<EOT
  7.         <input type="hidden" id="leonax-magic" name="leonax-magic" value="0">
  8.         <script type="text/javascript">
  9.           jQuery(function() {
  10.             jQuery("#comment").on("keyup", function() {
  11.               jQuery("#leonax-magic").val("$leonax_magic");
  12.             });
  13.           })
  14.         </script>
  15. EOT;
  16.     return $fields;
  17. }
  18. add_filter('comment_form_default_fields', 'leonax_anti_spam_form');

  19. function leonax_anit_spam_caught() {
  20.   wp_die('<strong>ERROR</strong>: Looks like you are a spam bot. Please stop doing this.');
  21. }

  22. function leonax_anti_spam_check( $commentdata ) {
  23.   global $leonax_magic_lower, $leonax_magic_upper;
  24.   if ( isset($commentdata['user_ID']) && $commentdata['user_ID'] ) {
  25.     return $commentdata;
  26.   }
  27.   if ( !isset($_POST['leonax-magic']) ) {
  28.     leonax_anit_spam_caught();
  29.   }
  30.   $magic = intval($_POST['leonax-magic']);
  31.   if ($magic < $leonax_magic_lower || $magic > $leonax_magic_upper) {
  32.     leonax_anit_spam_caught();
  33.   }
  34.   return $commentdata;
  35. }
  36. add_filter( 'preprocess_comment' , 'leonax_anti_spam_check' );
复制代码
(支持 pingback/trackback 又可以屏蔽垃圾代码)
  1. $leonax_magic_lower = 328;
  2. $leonax_magic_upper = 3450709;

  3. function leonax_anti_spam_form($fields){
  4.     global $leonax_magic_lower, $leonax_magic_upper;
  5.     $leonax_magic = mt_rand($leonax_magic_lower, $leonax_magic_upper);
  6.     $fields['leonax_magic'] = <<<EOT
  7.         <input type="hidden" id="leonax-magic" name="leonax-magic" value="0">
  8.         <script type="text/javascript">
  9.           jQuery(function() {
  10.             jQuery("#comment").on("keyup", function() {
  11.               jQuery("#leonax-magic").val("$leonax_magic");
  12.             });
  13.           })
  14.         </script>
  15. EOT;
  16.     return $fields;
  17. }

  18. add_filter('comment_form_default_fields', 'leonax_anti_spam_form');

  19. function leonax_anit_spam_caught() {
  20.   wp_die('<strong>ERROR</strong>: Looks like you are a spam bot. Please stop doing this.');
  21. }

  22. function leonax_anti_spam_check( $commentdata ) {
  23. // ---以下为修改的----
  24.   $comment_type = '';
  25.   if ( isset($commentdata['comment_type']) ) {
  26.     $comment_type = trim($commentdata['comment_type']);
  27.   }   
  28.   
  29. if ( ($comment_type == 'pingback') || ($comment_type == 'trackback') ) {
  30.     return $commentdata;
  31.   }
  32.   $content = '';
  33.   if ( isset($commentdata['comment_content']) ) {
  34.     $content = trim($commentdata['comment_content']);
  35.   }   
  36.   if (!strlen($content)) {
  37.     leonax_anit_spam_caught();
  38.   }
  39.   
  40.   if (preg_match("/[a-e0-9]{25,}/i", $content)) { //  人为测试捕捉 上图奇怪的ID
  41.     leonax_anit_spam_caught();  
  42.   }

  43. // ---修改结束---------
  44.   global $leonax_magic_lower, $leonax_magic_upper;  
  45.   
  46.   if ( isset($commentdata['user_ID']) && $commentdata['user_ID'] ) { // 登陆用户允许
  47.     return $commentdata;
  48.   }
  49.   
  50.   if ( !isset($_POST['leonax-magic']) ) {
  51.     leonax_anit_spam_caught();
  52.   }
  53.   $magic = intval($_POST['leonax-magic']);
  54.   if ($magic < $leonax_magic_lower || $magic > $leonax_magic_upper) {
  55.     leonax_anit_spam_caught();
  56.   }
  57.   return $commentdata;
  58. }

  59. add_filter( 'preprocess_comment' , 'leonax_anti_spam_check' );
复制代码
目前在用的方法:ajax 提交评论、直接禁止访问 wp-post-comment.php 文件、禁止在黑名单上的新访客提交评论、禁止新访客提交无中文或者有日文的评论以及第五种方法——Leona+ 的通过 Javascript 抓取使用脚本自动填写提交的评论(垃圾评论)。效果还行,偶尔能看到一些也许是人肉发送的垃圾评论。当然了,我这里本身访问量就很少,评论也少……
腾讯云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )