被恶意提交,防止恶意提交,最有效的方法是:DeDeBIZ织梦自定义表单添加访客提交时间和访客IP+限制每天每个IP提交表单次数。
上一篇《DeDeBIZ自定义表单提示数据校验不对的解决办法》织梦教程中,彻底解决了数据校验不对。在这篇织梦教程中,我将教大家实现拦截垃圾留言,限制IP提交次数,防止用户恶意提交操作。还是那句话,废话少说,直接上教程吧。
一、教程开始
1、给表单添加提交时间和IP地址。
1.1、后台 - 模型管理 - 自定义表单管理 - 修改 - 添加新字段
字段名称:提交时间 字段标识:time 数据类型:单行文本(varchar)
1.2、后台 - 模型管理 - 自定义表单管理 - 修改 - 添加新字段
字段名称:IP地址 字段标识:ip 数据类型:单行文本(varchar)
2、打开 /apps/diy.php 搜索
$fieldarr = explode(';', $dede_fields);
在它下面加入
$time = GetDateTimeMk(time()); $ip = GetIP();
这样改了以后,前台表单中可以不用出现提交时间和IP地址的输入框。
二、调用标签:举个例子,代码如下
<form name="addcontent" action="/apps/diy.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="action" value="post"> <input type="hidden" name="diyid" value="1"> <input type="hidden" name="do" value="2"> <table class="table mb-0"> <tr> <td>姓名</td> <td colspan="3"><input type='text' name='xingming' id='xingming' class='form-control admin-input-lg' value=''> </td> </tr> <tr> <td>电话</td> <td colspan="3"><input type='text' name='dianhua' id='dianhua' class='form-control admin-input-lg' value=''> </td> </tr> <tr> <td align="center"><button type="submit" name="submit" class="btn btn-success btn-sm">提交</button> <button type="reset" name="reset" class="btn btn-outline-success btn-sm">重置</button></td> </tr> </table> </form>
看上面的表单,没有 dede_fields 和 dede_fieldshash 这种小尾巴。所以,你的前端表单代码,是可以不用修改的,但前提是:提示数据校验不对的解决办法。
三、限制每个IP每天只能提交自定义表单3次
前提是要有上面添加的IP和提交时间哦,而且要注意你的字段名 time 和 ip,要与下面的教程一致。打开 /apps/diy.php 搜索
if ($dsql->ExecuteNoneQuery($query)) {
在它的上面加入
$aaa = $dsql->getOne("SELECT count(*) AS dd FROM `{$diy->table}` WHERE ip='{$ip}' AND date_format(time,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d')"); if($aaa['dd'] >= 3) { showmsg('明天再来!', '-1'); exit(); }
注意上面的 ip='{$ip}' AND date_format(time,'%Y-%m-%d')
ip 和 time 这2个字段可以改成你自己的,但上面添加的字段都必须全部改
四、限制10秒后才能继续提交
打开 /apps/diy.php 搜索
if ($dsql->ExecuteNoneQuery($query)) {
在它的上面加入
$bbb = $dsql->getOne("SELECT * FROM `{$diy->table}` WHERE ip='{$ip}' order by id desc limit 0,1"); if(!empty($bbb['time']) && (GetMkTime($bbb['time']) + 10) > time()) { ShowMsg('请稍后10秒再试!','-1'); exit(); }
这个与 限制每个IP每天只能提交自定义表单3次 不会冲突。
+29 29 个回复 | 最后更新于 2025-01-19
登录后方可回帖