dedecms织梦中的自定义表单非常实用,但是没有数据验证过滤,随便启用很容造成垃圾信息泛滥,所以必须要设置一下。 1.简单的html层面的防护,通过JS判断是否为空,进行简单的过滤。 <script type="text/javascript"> function check(){ var fankui=document.getElementById('fankui'); var names=document.getElementById('names'); if(fankui.value.length==0){ alert("反馈内容不能为空"); fankui.value=""; fankui.focus(); return false; } if(names.value.length==0){ alert("姓名不能为空"); names.value=""; names.focus(); return false; } } </script> 这只是一个最简单的过滤,对于普通用户来说完全够用,如果是老鸟的话可以轻松的绕过,那么就需要PHP层面的过滤了。 2.PHP提交数据过滤 找到dedecms织梦plus文件下的diy.php 在$query = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, 0 $addvalue); ";的前一行添加: //判断用户名和手机号码是否正确 if(preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $name)==0) { showMsg('名称只支持填写中文,请正确填写', '-1'); exit(); } if(!eregi("^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$",$tel)) { showMsg('手机号码错误,请正确填写', '-1'); exit(); } //验证邮箱 if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)) { showMsg('请您填写正确的E-Mail 地址!', '-1'); exit(); } 其中$name,$tel,$email是你自定义的客户名称、电话、邮件的数据字段名,根据你的自定义修改。这里使用正则匹配很重要了,起码不会随便填个就可以了。 preg_match是现在php用的函数,eregi据说从PHP5.3开始就不支持,实际测试环境用的PHP5.4也是支持的。 3.PHP限制用户提交次数 有很多注册机和恶意提交软件会不停的向系统提交大量的垃圾信息,甚至导致数据库空间被堆满,这样的话就需要限制用户提交的次数了。 我们可以采用验证Cookies方法,达到织梦DedeCMS自定义表单限制IP24小时只能发布一次功能。 实现方法是,打开plus下diy.php文件找到以下代码: if(!is_array($diyform)) { showmsg('自定义表单不存在', '-1'); exit(); } 在其下面添加: if(isset($_COOKIE['VOTE_MEMBER_IP'])) { if($_COOKIE['VOTE_MEMBER_IP'] == $_SERVER['REMOTE_ADDR']) { ShowMsg('您已经填写过表单啦','-1'); exit(); } else { setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/'); } } else { setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/'); } 这样的话基本上就可以杜绝dedecms织梦大量的垃圾信息了,当然如果对方清空Cookies在提交的话是可以的,网络安全本来就没有100%的。 根据网站实际情况按照123步骤来确定用哪一种,如果三种都用了依然有大量的垃圾信息那么你可以使用第三方的各种复杂的验证方式或者屏蔽垃圾信息来源IP等方式。 |