首页 > 编程 > WordPress 防止冒充留言

WordPress 防止冒充留言

以下转载来自:MG12

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 测试一下.

分类: 编程 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。直接点击评论上方的回复实现此功能