WordPress 防止冒充留言
WordPress 一直以来都有个问题, 如果博主设置评论不需要审核批准就能发表, 那么有可能被人冒名顶替管理员或其他注册用户进行留言. WordPress 是以 email 来识别留言者的, 也就是说, 只要有人知道管理员的邮箱, 那就可以冒充他留言. 虽说管理员可以随后删除这些评论, 但是万一管理员长期不在线或者有人恶意留言那还是挺麻烦的.
这个问题在我刚使用 WordPress 的时候 (WP 2.2) 就发现了, 但这应该不是 bug, 只能认为是设计不周. 后台有提供两种评论审核机制的, 一种是全部都要审核, 另一种是对审核过的不再需要审核. 但这对网站管理和用户体验来说都是极大的挑战, 所以大多数站长都不会打开审核功能, 就这样留下了隐患.
我在以前的主题中试过加入一些 JavaScript 简单的阻挡一下冒充行为, 但觉得这只能防君子, 形同虚设, 后来也就撤了. 但最近有位同志为了这个跑我的博客来搞测试, 把我给郁闷死了. 所以还是想办法解决了它吧. 其实处理方法很简单, 就是在提交评论的时候多加一个检验, 如果评论者用了管理员或者注册用户的 email 进行留言, 就跳转报错页面. 处理方法如下:
1. 到 WordPress 的根目录, 打开文件 wp-comments-post.php. (每次发表评论都要调用它, 就拿它开刀吧.)
2. 查找 if ( '' == $comment_content ), 在它之前追加以下代码. (一般在处理内容之前处理 email.)
if (!$user->ID) { $result_set = $wpdb->get_results("SELECT display_name, user_email FROM $wpdb->users WHERE display_name = '" . $comment_author . "' OR user_email = '" . $comment_author_email . "'"); if ($result_set) { if ($result_set[0]->display_name == $comment_author) { wp_die( __('Error: you are not allowed to use the nickname that you entered.') ); } else { wp_die( __('Error: you are not allowed to use the email that you entered.') ); } } }
我这样处理, 会对包括管理员在内的所有注册用户的 email 进行检测. 但如果你只是想禁止输入管理员或者作者等特殊群体的 email, 那么你需要在 SQL 中关联上 $wpdb->usermeta 这个表, 并对 meta_key = 'wp_capabilities' 的项进行筛选.
看到这, 你是不是还有个问题? 为什么不用 add_action('comment_form', 'email_validate'); 处理呢? 因为用这个的话, email_validate 方法只会在评论提交完成后才触发, 评论都已经发表成功了, 那么 email 的检测就失去意义了.
好吧! 相信你已经知道怎么干了, 我就不多说了. 如果你对此怀疑, 可以在这里用我的 email 测试一下.
2008/12/28 更正
为防止有人用别的邮箱注册同一个头像, 并以注册用户的昵称作为显示的名字, 以达到冒名顶替的效果, 现在对处理代码做了进一步的改良. 这里要感谢 Calcifer. ![]()
支持一下~学习了
I’ve read several good stuff here. Definitely worth bookmarking for revisiting. I wonder how much effort you put to make such a great informative website.
测试
这个方式好,过去我就没有想过这个问题
看起来不错,暂时不用了,等以后出名了留言的多了再说。XD
我测试一下看看。冒充管理员不行,冒充其他人。
这个方式好,过去我就没有想过这个问题,看了这个文章,发现真是一个有趣的事情。
这个问题我就是不知道解决,谢谢了。
还有这功能啊,真强大。
冒充下博主
果然有效
第二次留言就可以显示了?
一定要审核么?
果然是只禁用昵称 而不禁用真实的用户名 mg12这个能不能进一步再升级呢?
测试~~~
我也试试这代码,可是昵称好像还是可以冒充。
沙发~
这个功能很实用,wp的这个机制不是很好,在国内这样的网络环境不合适。。。
MVS……………………………………
@feicun
呃... 你已经被评为最有价值沙发了. MVS.
晕……还有人在冒充我……
冒充一楼~~~~~~~~··
俄也冒充下1楼
用 CSS 控制显示就足够了。一目了然不是更好。
再冒充下自己
貌似上次出错仅仅是因为邮箱大写了。。。
俄也冒充下1楼
貌似效果不错啊
@calcifer
已经被我 report 了.
呀,mg12你PR值太高了,被流氓贴广告回复了……
还好今天再次光临,发现了这个问题,赶紧回去修复。
我们一起感谢一楼的献身精神!
文章不错。路过此地给你踩踩·