PHP漏洞防范之防止表单重复提交有哪些常用方法?
《PHP漏洞防范之防止表单重复提交有哪些常用方法?》要点: 表单重复提交,主要是有这几种场景: 1、功击者在站外自己构造一个表单重复不断提交给您的网站。 2、用户提交表单时,刚好卡滞了,用户不明就里,尝试多次按下表单提交按钮,这时服务器已收到多次。但用户仍不知道。 3、功击者有意制造重复提交。 场景1主要且防跨站提交,不在这里讨论,参http://www.jb51.cc/jiaocheng/61.html 后面2种有以下几种方法可以阻止。 1、使用JS让按钮在点击一次后禁用,即设置它的属性disabled="disabled"。这种方法可以防止多次点击的发生,实现方式较简单。 $('button[type=submit]').attr('disabled','disabled'); layer.msg('正在提交,请稍候......'); 缺点是若客户端禁止JavaScript脚本,则失效。这个方法主要是防君子不防小人,因为功击者可以禁用JS。 2、表单隐藏域中存放token(表单被请求时生成的标记),同时,在session中也保存。等到用户提交表单后,进行比对。 采用此方法在接收表单数据后,检查此标志值是否存在,先进行删除,然后处理数据; 若不存在,说明已提交过,忽略本次提交。 缺点:使用SESSION很耗资源。 替代方案:使用缓存来保存token。 //1、服务端生成 $_SESSION['token'] = mt_rand(1000, 9999); //2、在表单页隐藏域存放此session值 <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> //3、用户提交表单后处理 if($_POST['token'] != '' && $_POST['token'] == $_SESSION['token']) { unset($_SESSION['token']); //新提交,通过,存储数据 } else { echo '失败,已提交过表单'; } 最后,请记得: 在提交成功后执行页面重定向。转到提交成功信息页面。 原因:避免有意功击者F5重复提交,消除浏览器前进和后退按钮可导致的同样问题。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |