加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP漏洞防范之防止表单重复提交有哪些常用方法?

发布时间:2020-05-22 12:06:37 所属栏目:PHP 来源:互联网
导读:介绍《PHP漏洞防范之防止表单重复提交有哪些常用方法?》开发教程,希望对您有用。

《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重复提交,消除浏览器前进和后退按钮可导致的同样问题。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读