WordPress评论回复邮件提醒有重大BUG

给WordPress添加评论回复邮件提醒功能,目前已成为WordPress博客的标配,不仅可以大大提高用户体验,还可以增加访客的回头率。 偶然发现,这是一项很危险的功能,目前网上流行的代码版本很容易被一些别有用心的人利用: 我可以给你博客的所有评论都回复一遍

给WordPress添加评论回复邮件提醒功能,目前已成为WordPress博客的标配,不仅可以大大提高用户体验,还可以增加访客的回头率。

偶然发现,这是一项很危险的功能,目前网上流行的代码版本很容易被一些别有用心的人利用:

我可以给你博客的所有评论都回复一遍,不仅在你的博客留下了垃圾评论,垃圾内容也通过评论回复提醒邮件顺带发出去了。

无需花费心思去获取评论者的邮件地址,也不用担心评论是否还在等待审核,垃圾广告内容顺利发出,欧耶!

很多博客都宣扬不会泄漏评论者的email,但是如果这个bug被人利用,你的博客倒成了垃圾邮件的发送者,这岂不是很搞笑?

解决办法

Step 1:
进入WordPress后台 – 设置 – 讨论,勾选"评论必须经人工批准",这样所有评论必须经过管理员审核才能显示,虽然有点麻烦,但是我觉得这是博主应该负起的一项责任。

Step 2:
接着我们需要将之前的评论回复邮件提醒的代码做些修改。

我 设计的运行机制是这样的:对于管理员和编辑的评论回复,可以直接给评论者发送提醒邮件;对于普通访客发表的评论,先让它在待审评论中呆着,等博主审核后, 再给评论者发送提醒邮件。下面是一个评论回复邮件提醒的代码范例,使用的是所有评论回复都发送邮件通知的版本,如果你需要其他功能,请参考网上的代码进行 修改:

/**
 * WordPress评论回复邮件提醒防垃圾评论版
 * 作者:露兜
 * 博客:http://www.ludou.org/
 *  
 *  2014年7月5日 :
 *  首个版本
 */


function ludou_comment_mail_notify($comment_id, $comment_status) {
  // 评论必须经过审核才会发送通知邮件
  if ($comment_status !== 'approve' && $comment_status !== 1)
    return;
 
  $comment = get_comment($comment_id);

  if ($comment->comment_parent != '0') {
    $parent_comment = get_comment($comment->comment_parent);

    // 邮件接收者email      
    $to = trim($parent_comment->comment_author_email);
   
    // 邮件标题
    $subject = '您在[' . get_option("blogname") . ']的留言有了新的回复';

    // 邮件内容,自行修改,支持HTML
    $message = '
      <p>Hi, '
. $parent_comment->comment_author . '</p>
      <p>您之前在《'
. get_the_title($comment->comment_post_ID) . '》的留言:<br />'
       . $parent_comment->comment_content . '</p>
      <p>'
. $comment->comment_author . ' 给您回复:<br />'
       . $comment->comment_content . '<br /><br /></p>
      <p>您可以 <a href="'
. htmlspecialchars(get_comment_link($comment->comment_parent)) . '">点此查看回复完整內容</a></p>
      <p>欢迎再度光临 <a href="'
.home_url().'">' . get_option('blogname') . '</a></p>
      <p>(此邮件由系统自动发送,请勿回复)</p>'
;

    $message_headers = "Content-Type: text/html; charset=\"".get_option('blog_charset')."\"\n";
   
    // 不用给不填email的评论者和管理员发提醒邮件
    if($to != '' && $to != get_bloginfo('admin_email'))
      @wp_mail($to, $subject, $message, $message_headers);
  }
}


// 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核
add_action('comment_post', 'ludou_comment_mail_notify', 20, 2);

// 普通访客发表的评论,等博主审核后再发送提醒邮件
add_action('wp_set_comment_status', 'ludou_comment_mail_notify', 20, 2);


最后,还是希望看过这篇文章的网友不要去干坏事哦。


 

 

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

上一篇、下一篇文章代码: ?php previous_post_link(%link,) ??php next_post_link(%link,) ? 该代码解析出来的代码大概如下: a href= rel=external nofollow rel=external nofollow /aa href= rel=external nofollow rel=external nofollow /a 通过 get_pr
WordPress目前在最近的版本中为所有需要新窗口打开的链接都自动添加了新的 noopener noreferrer 属性。noopener noreferrer 属性并不是新发布的标准,但 WordPress 4.7.4 版开始的编辑器默认都会添加该属性。新窗口打开超链接的属性 target=_blank 增加 rel=
NAS已经把玩差不多半个月了,基本的download,DLNA,都已搞定。因为一直都是博客的忠实支持者,所以必须把自己的博客也搬到NAS上,老是跟大家都混在新浪上岂不是很没面子。于是开始购入域名,研究DDNS,找博客平台。很快锁定wordpress,看了别人建站效果,感
尊敬的百度站长平台用户您好: 百度搜索自推出MIP移动网页加速器以来反响良好,截至目前超过10.2亿个页面完成MIP化改造。 为了降低站点MIP改造难度,在MIP技术研究小组的辛勤工作下,wordpress、帝国CMS、织梦DEDECMS标准模板已编写完成供大家使用,欢迎大家
WordPress全站伪静态应该怎么做?主机的操作系统不同,设置方法也不同: 一、linux主机下的WordPress全站伪静态设置起来比较容易,只需要在WP的后台设置固定链接更改为自定义格式:/%post_id%.html 设置更改后,文章的网址就会变成形如:http://www.XXX.com/
随着互联网的普及,建站门槛的降低,很多没有专业知识的国人也加入到了建站大军之中,最初那批只为了讨论代码的以及建站经验的站长也都消失的差不多了,现在个人建站很少有不带商业目的的。随着网站的增加,但是互联网信息的资源却没有那么快速的增长,造成