兰陵の记事簿

Tech Otakus Save The World

兰陵

2016年7月26日

代码>

垃圾评论死れ

本来就是个门可罗雀的小站,还偶尔收到一些乱七八糟充满超链接的垃圾评论等待我审核(╯‵□′)╯︵┴─┴。发现有新评论却是垃圾评论,我的心情是万分复杂的。

垃圾评论死れ

本站早已退多说,多说也能拦截一些垃圾评论。虽然有插件像什么Akismet、NoSpamNX、myQaptcha、Fancy Captcha、SI CAPTCHA、Some Chinese Please!等等和各种流弊的反垃圾评论代码,还有自带黑名单关键字和超链审核拦截垃圾评论,但是我想越简单越好,让你直接不能评论。

没错,针对本站收到的垃圾评论,特点就是全是英文,富含大量超链接。于是我上网看了看,借鉴了下别人的方法(ฅ´ω`ฅ)

评论必须含有中文,禁止全英文评论,将下面的代码添加到主题的 functions.php 文件。

function refused_spam_comments( $comment_data ) {  
$pattern = '/[一-龥]/u';  
if(!preg_match($pattern,$comment_data['comment_content'])) {  
wp_die('评论必须含中文!');  
}  
return( $comment_data );  
}  
add_filter('preprocess_comment','refused_spam_comments');

禁止日文评论

function comment_jp_post( $incoming_comment ) {
$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
if(preg_match($jpattern, $incoming_comment['comment_content'])){
wp_die( "禁止有日文字符的评论" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'comment_jp_post');

但是这样。。。极其不友好啊,万一游客想留个爪卖个萌发个颜文字怎么办_(:з」∠)_

于是还是使用类似屏蔽关键字的方法,超链接(http)过多的话禁止评论。

推荐这个方法,发两个表情包,来两句英文没问题,又能禁止发出过多超链接的垃圾评论,极其友好。

function spamCheck( $incoming_comment ) {
if(substr_count($incoming_comment['comment_content'],'http') > 3) {
wp_die( '请勿在您的评论中包含过多链接!' );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'spamCheck');

然后两个结合↓

function spamCheck( $incoming_comment ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( '评论必须含中文!' );
}
if(substr_count($incoming_comment['comment_content'],'http') > 3) {
wp_die( '请勿在您的评论中包含过多链接!' );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'spamCheck');

或者完全禁止超链接评论,即包含href=" 或者rel="nofollow"或者http://

function spam_comment_post( $incoming_comment ) {  
$http = '/[href="|rel="nofollow"|http://|</a>]/u'; 
if(preg_match($http, $incoming_comment['comment_content'])) { 
wp_die( "请勿在您的评论中包含超链接!" );  
}  
return( $incoming_comment );  
}  
add_filter('preprocess_comment', 'spam_comment_post');

综上,都是些治标不治本的方法。

针对那些使用技术手段,比如GET、POST等方式不填写前台表单,直接读取后台程序文件的spam,只有屏蔽IP,其它什么验证码、滑动解锁等等都没用。屏蔽IP。。。好像也没啥用。

PS.以下没试过,只是看到有些博主采用的是这种方法

有些博主通过修改网站根目录下wp-comments-post.php文件名,把wp-comments-post.php文件名改成其他的,然后在主题文件里的comments.php里查找代码里的wp-comments-post.php改成相应的文件名。但是大部分主题文件里的都没有这个,于是有通过改wp-includes目录的comment-template.php文件,查找代码里的wp-comments-post.php改成相应的文件名。也有通过移动wp-comments-post.php文件的,具体可以自己研究下。

 

#一言#

来一发吐槽

  1. 御坂网络 #41

    等我网站做的差不多了我就莱你这里发广告,怕不怕. :arrow: 不过我比spam高级,只发有意义的广告. :mad:
    然后,为了不让别人在我网站发广告,我又对我的博客做了严格的防广告策略. :twisted:
    只能我给别人发广告,别人不能给我发广告,233 :wink:
    自己的防广告系统还是蛮有用的..比如下面这条全英文的广告 :!:
    请求时间 2017年01月14日22:36:36 POST 非法 176.8.104.192 176.8.104.192 乌克兰 乌克兰 00380 10 /68.misaka POST: a:7:{s:3:”gid”;s:2:”68″;s:7:”comname”;s:9:”DaiterMom”;s:7:”commail”;s:19:”daiter33up8@mail.ru”;s:6:”comurl”;s:52:”http://hook2up8.top/?..省略

  2. Mr.Tcsy #33

    针对那些使用技术手段,比如GET、POST等方式不填写前台表单,直接读取后台程序文件的spam,只有屏蔽IP,其它什么验证码、滑动解锁等等都没用。屏蔽IP。。。好像也没啥用。

    我第一次听说还有这种技术? 首先你说的这种不填写前台表单 这部现实吧

    即使你适用post 方式直接发送数据 那也是基于已经创建好的表单吧? , 感觉你这句话在胡说八道。。。。。

    (((┏(; ̄▽ ̄)┛装完逼就跑

    1. 兰陵 #34
      変態

      @Mr.Tcsy 首先,我遇到的辣鸡评论是全英文和含有大量超链接的,这是针对我的博客情况使用的。其次,这和表单没多大关系吧,通过前台获得的数据进行判断是否有过多链接和纯英文,符合的话就直接不作为评论,pass掉。我只是在评论内容上做手脚就行了 :neutral:

          1. Mr.Tcsy #37

            @兰陵 首先我不清楚在你眼中前台指的什么?

            我认为后台指php文件 数据库存储处理 前台指用户能看到的页面,那么评论框怎么就不是前台了呢?

            从你的意思来看不是用户交互的数据就不是前台喽,

            那么举例子 加入我用py写一个发送post数据的脚本 里面的构造不还是要按照正常用户发起的表单请求来进行构造吗!!

            你的意思是说人家直接读取后台文件像数据库写入评论信息,但是这样的话又。。就是sql注入的问题了吧。

  3. ⑨BIE #4

    为啥我的博客都没有捏2333333莫非是我自带阿卡林模式hhhhh
    果然我的网站渣到爬虫都不屑于爬我的站了23333
    不过一般对付这种垃圾评论只要设置必须有中文评论就够了,连接数没意义的说

Title - Artist
0:00