1、IP限制
IP的伪造较为困难,因为要经过三次握手校验的过程,使用SERVER变量中的HTTP_CLIENT_IP和REMOTE_ADDR。
HTTP头信息中的是否来自代理(HTTP_X_FORWARDED_FOR)判断,如果有这个报头,基本可以拒绝,因为基本会来自于伪造,误差较小。
2、验证码
原有的简单数字和字母组合的验证码已经非常容易被机器人图片,现在多采用中文验证码和回答问题的验证码。当然用手机短信验证码则伪造成本非常大的。
3、Token和表单欺骗
Token则是每个表单加入隐藏的Token,每次提交都要与服务端的进行校对,若不通过则会机器发布。
DEMO:
<?php
define('SECRET', "67%$#ap28");
function m_token(){
$str = mt_rand(1000, 9999);
$str2 = dechex($_SERVER['REQUEST_TIME'] - $str);
return $str.substr(md5($str.SECRET), 0, 10).$str2;
}
echo m_token();
echo '<hr/>';
function v_token($str, $delay=300){
$rs = substr($str, 0, 4);
$middle = substr($str, 0, 14);
$rs2 = substr($str, 14, 8);
return ($middle == $rs.substr(md5($rs.SECRET), 0, 10) && ($_SERVER['REQUEST_TIME'] - hexdec($rs2) - $rs) <$delay );
}
var_dump(v_token(m_token()));
?>
表单欺骗:加入多个隐藏无用表单,表单的Name故意混淆,通过判断混淆的真实无用的表单是否有真实的信息,有的话肯定是机器人处理的。
4、审核机制
最有效的办法,但是需要人力成本和时间成本较大。