其实伦家不想这么快就发新文章的, 把美丽动人的玉照都顶下去了.
大家知道wordpress黑名单的评论会被自动标记为垃圾评论, 这个做法我感觉挺浪费资源的, 毕竟垃圾评论还是写入了数据库, 如果集中时间段被大量spam攻击, 这种黑名单机制对保护数据库无济于事,
然后我写了个函数, 效果是直接拒绝符合黑名单条件的评论发表, 评论不会写入数据库
方法A : 以下代码扔到functions.php
function xhd_fuckspam($comment) {
if( is_user_logged_in()){ return $comment;} //登录用户无压力...
if( wp_blacklist_check($comment['comment_author'],$comment['comment_author_email'],$comment['comment_author_url'], $comment['comment_content'], $comment['comment_author_IP'], $comment['comment_agent'] )){
header("Content-type: text/html; charset=utf-8");
exit('草你麻痹垃圾评论滚粗');
} else {
return $comment;
}
}
add_filter('preprocess_comment', 'xhd_fuckspam');
方法B : 以下代码扔到comments-ajax.php (随便找个地方,比如检查评论太快那段函数后面)
if( wp_blacklist_check($comment_author,$comment_author_email,$comment_author_url, $comment_content )&&!is_user_logged_in()){//登录用户还是无压力...
err(__('草你麻痹垃圾评论滚粗'));
}
两个方法效果和原理略有不同,
- 方法A:click submit→POST出去→收到拒绝信息 exit→return→ 会清空评论框内容并重置提交时间间隔 == submit了一次
优点: 杀毒彻底 - 方法B:click submit→POST被拒绝→return→ 会保留评论框内容 == 没有submit过
优点:- 评论者省时省力, 我是用此法来拒绝纯英文评论的, 因为此类误判几率大, 省得好人们重新再评论一次了;
- 由于没有POST出去, 所以相对而言对数据库压力最小;
缺点: 由于comments-ajax是从表单内直接提取$_POST的的字段,所以无法匹配IP和agent类黑名单
可以自行测试, 方法: 把你在这里评论时的昵称改成带outlet或者锘的, (这些都已经in_array在小蝴蝶黑名单了) 然后提交评论, 剩下来的你们就自己感受吧
fuck-spam is coded by http://xiaohudie.net. Any posts here is one hundred percent original, so please keep my link so as not to hurt this pretty girl. -
挺清新的一个博客,很赞!
以前本敏的某个东西(WP非博客)用到过,方案和你的2类似,只是代码没你弄得好(登录用户没排除)…
@敏敏 另外我写的类经常喜欢以yvonnelu命名,不知道会不会太自恋了
@敏敏 我很多时候也喜欢用xhd命名
您好,我使用的方法A,可以很好过滤关键词黑名单,但好像对ip黑名单无效,黑名单ip不能被exit”…”,请问怎么回事啊?
已经可以了,谢谢。增加了两行:
$comment[‘comment_author_IP’] = preg_replace( ‘/[^0-9a-fA-F:., ]/’, ”,$_SERVER[‘REMOTE_ADDR’] );
$comment[‘comment_agent’] = isset($_SERVER[‘HTTP_USER_AGENT’] ) ? substr($_SERVER[‘HTTP_USER_AGENT’], 0, 254 ) : ”;
话说,这是个好东西。。。
@不认识 当然啦 ^^有效避免垃圾评论塞满数据库
赞一个