《PHP教程:修改PHP脚本使WordPress拦截垃圾评论的方法示例》要点:
本文介绍了PHP教程:修改PHP脚本使WordPress拦截垃圾评论的方法示例,希望对您有用。如果有疑问,可以联系我们。
PHP教程拦截英文垃圾评论
PHP教程由于绝大多数的垃圾评论都是英文的,所以国内不少朋友在使用 Some Chinese Please 插件,它可以有效地拦截内容中不带有中文字的comment和trackback(pingback),不写入数据库中,可有效地减小spam对blog服务器的无谓使用.虽然已经 2 年多没有更新,但还是可用的.
PHP教程其实还可以简化下,直接将下面的代码添加到主题的 functions.php 文件,效果与使用 Some Chinese Please 插件相同:
PHP教程
/* refused spam */
function refused_spam_comments( $comment_data ) {
$pattern = '/[一-]/u';
if(!preg_match($pattern,$comment_data['comment_content'])) {
err('评论必须含中文!');
}
return( $comment_data );
}
add_filter('preprocess_comment','refused_spam_comments');
PHP教程@Teddysun http://teddysun.com/ 经过实测反馈,Wordpress中并没有err这个函数(这个函数也许是存在于 @知更鸟 的主题里).因此不会有提示信息出现.最好还是用wp_die函数,这样就会有提示信息.所以,上面的代码如果不生效,可以使用以下代码:
PHP教程
/* refused spam */
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');
PHP教程针对那些使用技术手段,比如GET、POST等方式不填写前台表单,直接读取后台程序文件的spam,只有屏蔽IP才能缓解疯狗一样的攻势,其它什么验证码、滑动解锁等等都没用.
PHP教程禁止某些IP拜访
PHP教程可以在.htaccess文件中添加:
PHP教程
Order Deny,Allow
Deny from xxx.xxx.xxx.xx
Deny from xxx.xxx.xxx.xx
PHP教程拦截中文垃圾评论
PHP教程如果发现大量垃圾评论是中文,那么可以用Willin Kan 写的小墙工具, 理论上可以 100% 屏蔽机器人发出的 spam. 如果是自然人提交评论, 小墙会在评论提交表单中加一个 hidden 变量, 如果后台检测不到这个变量, 则认定为 spam, 可以选择需要审核, 也可以直接过滤掉.
PHP教程如果对方知道你用的 hidden 变量或者使用虚拟点击, 就可以破掉小墙. 但是 spam 本来就是小成本和以量取胜的事情, 除非与你与 spammer 结仇了, 我相信人家不会那么无聊来破你小墙. 而且机器人 spam 的数量占了绝大多数, 这个工具很有必要.
PHP教程貌似 Willin 现在不用 WordPress 了, 网站也正在维护, 小墙代码我就贴在下面. 使用方法很简单, 拷贝到 function.php 文件最后即可. 其中 wall 是暗藏关键字, 有需要的请自行更改 (不改也可以).
PHP教程
class anti_spam {
//建立
function anti_spam() {
if ( !current_user_can('level_0') ) {
add_action('template_redirect', array($this, 'w_tb'), 1);
add_action('init', array($this, 'gate'), 1);
add_action('preprocess_comment', array($this, 'sink'), 1);
}
}
//O谖
function w_tb() {
if ( is_singular() ) {
ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea>#",
"textarea$1name=$2wall$3$4/textarea><textarea name=\"comment\" cols=\"50\" rows=\"4\" style=\"display:none\"></textarea>",$input);') );
}
}
//z查
function gate() {
( !empty($_POST['wall']) && empty($_POST['comment']) ) ? $_POST['comment'] = $_POST['wall'] : $_POST['spam_confirmed'] = 1;
}
//
function sink( $comment ) {
if ( !empty($_POST['spam_confirmed']) ) {
//办法一:直接醯, die(); 前面尚本h除即可.
//die();
//办法二:擞spam, 留在Y料z查是否`判.
//add_filter('pre_comment_approved', create_function('', 'return "spam";'));
/*
$is_ping = in_array( $comment['comment_type'], array('pingback', 'trackback') );
$comment['comment_content'] = ( $is_ping ) ?
"◎ @是 Pingback/Trackback, 小岩蛇@可能是 Spam!\n" . $comment['comment_content'] :
"[ 小判噙@是Spam! ]\n" . $comment['comment_content'];
*/
// MG12 的矸椒
$is_ping = in_array( $comment['comment_type'], array('pingback', 'trackback') );
if(!$is_ping) {
die();
}
}
return $comment;
}
}
new anti_spam();
PHP教程计算前端处理时间
PHP教程在输入框上方用 JavaScript 取一个时间戳作为全局变量, 在提交表单的时候获取提交时间, 两个时间相减, 如果小于可能值, 则视为机器人. 判断为机器人的评论你可以按小墙的方式处理, 也可以不处理 (不占用服务器资源, 但不能记录 spam 信息).
PHP教程相对与小墙, 这种办法更加可靠, 但绝不是没有漏洞, 只要 spammer 做个 setTimeout 延迟发布就破了.
PHP教程时间戳
PHP教程老掉牙的方机器人办法, 很实用, 但有最大的缺点: 用户体验不好. 要求访客多填一个很难观察的数字, 严重打压评论者积极性. WordPress 平台有很多这类插件可以用, 但我是不建议使用的.
欢迎参与《PHP教程:修改PHP脚本使WordPress拦截垃圾评论的方法示例》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/8267.html