Old

还是加上了“防止访客冒充博主发表评论”

我一直知道 WordPress 博客下访客是可以冒充博主发表/回复评论的,只要你知道博主的邮箱地址即可,但我一直懒得去加,因为开此博至今2年多几乎没有人在我这冒充博主发表/回复评论。

情人节前夜,不知道万戈是否耐不住寂寞还是为了即将来临的“爱要死”兴奋不己,特意来测试冒充一回(冒充评论可以点这里去围观一下),让我感觉到有点怕怕要是某天不是万戈而是超兴奋的spammer冒充一回不就要删到手软?于是我觉得还是加上这段“防止访客冒充博主发表评论”的代码比较好,防范于未然总是比较好的。

我记得我很早就收藏过这段代码(却不知道哪里出的了,去搜一下,一大把,个个都没说出自哪里……囧~),但是使用效果有点变态:可以防止访客冒充博主了,不过切把已经登陆的博主也禁止了,囧~这就是没有测试直接 Copy 代码的结果。

那么分析代码,原代码结构如下

// 防止访客冒充博主发表评论, 原出处: ? 知道者/原作者请告知一声
function z_user_check($incoming_comment) {
$isSpam = 0;
if ( trim($incoming_comment['comment_author']) == '这里填博主昵称' ) $isSpam = 1;
if ( trim($incoming_comment['comment_author_email']) == '这里填博主邮箱')     $isSpam = 1;
if(!$isSpam) return $incoming_comment;
wp_die('请勿冒充博主发表评论!');
}
global $user_ID;
if(intval($user_ID) == 0) add_filter( 'preprocess_comment', 'z_user_check' );

或许是引用变量 $user_ID 的问题,于是我改为如下,华丽的解决了

// 防止访客冒充博主发表评论, 原出处: ? edit by zwwooooo
function z_user_check($incoming_comment) {
global $user_ID;
$isSpam = 0;
if ( strtolower(trim($incoming_comment['comment_author'])) == '这里填博主昵称' ) $isSpam = 1;
if ( strtolower(trim($incoming_comment['comment_author_email'])) == '这里填博主邮箱') $isSpam = 1;
if (!$isSpam || intval($user_ID) > 0) { return $incoming_comment; } else { wp_die('请勿冒充博主发表评论!'); }
}
add_filter( 'preprocess_comment', 'z_user_check' );

折腾完,隐~

2011.2.17 Update:加入大小写验证。

zww
or
oooo

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25392

198 comments

  1. 一世年华 一世年华 Google Chrome 9.0.597.98 Google Chrome 9.0.597.98 Windows 7 Windows 7

    这代码犀利啊。。。。

    沙发
  2. 子夜星辰 子夜星辰 Google Chrome 9.0.597.98 Google Chrome 9.0.597.98 Windows XP Windows XP

    好代码,收下了。

    地板
  3. ......
  4. EIIE EIIE ChromePlus 1.5.2.0 ChromePlus 1.5.2.0 Windows XP Windows XP

    我比较懒...经常不登陆直接回复评论的... :evil:

    81楼
  5. 毕扬 毕扬 Google Chrome 9.0.597.98 Google Chrome 9.0.597.98 Windows 7 Windows 7

    我想看看仿冒那个,没看到。。

    82楼
    • zwwooooo zwwooooo Google Chrome 11.0.672.2 Google Chrome 11.0.672.2 Windows 7 Windows 7

      @毕扬
      假冒的我改了,而且是有人假冒万戈来假冒我,囧

  6. 无冷 无冷 Google Chrome 7.0.517.43 Google Chrome 7.0.517.43 Windows 7 Windows 7

    这个倒是值得一试,山寨的确很可怕

    83楼
  7. Simon Simon TheWorld Browser TheWorld Browser Windows 7 Windows 7

    这个对于一些服务性的网站有必要用。。哈哈。。

    我就加了个admin的logo。。偶是admin偶怕谁

    84楼
  8. 奚少 奚少 Firefox 10.0.2 Firefox 10.0.2 Windows 7 Windows 7

    忽然发现登录的博主也被禁止了。。。我来找解决方案的 :twisted:

    85楼
  9. 奚少 奚少 Firefox 10.0.2 Firefox 10.0.2 Windows 7 Windows 7

    额,原来我用的已经是最新版本的了。可能是因为我用了隐藏评论者信息导致我输入博主的信息后整个评论者信息全部不见了。。。

    86楼
  10. 奚少 奚少 Firefox 10.0.2 Firefox 10.0.2 Windows 7 Windows 7

    估计也不会有人在我那蛋疼的那样玩,还是改天再折腾吧~

    87楼
  11. 倡萌 倡萌 Google Chrome 18.0.1025.142 Google Chrome 18.0.1025.142 Windows XP Windows XP

    呵呵 好像还没有人冒充我 哈哈

    88楼
  12. ZIFANG.NET折腾记录 – 欧阳子方的小小世界 - pingback on 2012/10/13/ 17:08
    89楼
  13. bbis bbis Google Chrome 23.0.1271.95 Google Chrome 23.0.1271.95 Windows 7 Windows 7

    这个函数解决了手机端WP软件不能回复评论的问题~TKS

    91楼
  14. iShare iShare Google Chrome 28.0.1500.72 Google Chrome 28.0.1500.72 Windows 7 x64 Edition Windows 7 x64 Edition

    不知道为什么,加了这个还是被人给冒充了 :?:

    92楼
    • zwwooooo zwwooooo Firefox 22.0 Firefox 22.0 Windows 8 x64 Edition Windows 8 x64 Edition

      @iShare
      人家特意要破你还是可以的。

    • iShare iShare Google Chrome 28.0.1500.72 Google Chrome 28.0.1500.72 Windows 7 x64 Edition Windows 7 x64 Edition

      @zwwooooo
      我发现用跟我一样的名字不同的邮件地址是可以发表的,一样的邮件地址就不行,不用什么特殊操作,不知道是否跟我昵称和用户名不一样有关

    • zwwooooo zwwooooo Firefox 22.0 Firefox 22.0 Windows 8 x64 Edition Windows 8 x64 Edition

      @iShare
      那你注意一下你的邮箱地址是否正确了,或者直接在代码上写上你的邮箱

    • iShare iShare Google Chrome 28.0.1500.72 Google Chrome 28.0.1500.72 Windows 7 x64 Edition Windows 7 x64 Edition

      @zwwooooo
      代码里邮箱地址没有写错,我测试过,用我的名字,其他邮箱可以发表,用我管理员邮箱就会被这个阻止。

  15. 小王 小王 Google Chrome 33.0.1750.154 Google Chrome 33.0.1750.154 Windows 8.1 x64 Edition Windows 8.1 x64 Edition

    请教一下,如果我想多个昵称不想被冒充,我该怎么做呢?

    93楼
    • zwwooooo zwwooooo Firefox 28.0 Firefox 28.0 Windows 8.1 x64 Edition Windows 8.1 x64 Edition

      @小王

      if ( trim($incoming_comment['comment_author']) == '这里填博主昵称' ) $isSpam = 1;

      后面继续加

      if ( trim($incoming_comment['comment_author']) == '其他昵称' ) $isSpam = 1;

Leave a Reply