多语言展示
当前在线:1628今日阅读:126今日分享:42

PHP防止跨域提交表单[非 http_referer 验证]

PHP开发中跨域表单提交解决办法,网上很多办法都是这样写的,通过判断  HTTP_REFERER  来验证来源,这个等于没做,别人既然都知道跨域提交了,随便写一段代码就模拟出 referer,而你写的这一段验证等于0,下面介绍一个不通过使用验证码的手段来验证跨域提交,使用 session+token 验证
工具/原料
1

php

2

浏览器

3

一段 form 表单提交代码

方法/步骤
1

例如下面一段 form 表单提交页 form.php

处理表单请求页 post.php上面这两个页面组合起来就完成一个普通的post表单提交数据,而这样的代码是肯定会被跨域无限提交的,这只是一个简单的例子,但实际开发中你的业务逻辑代码会涉及到数据库操作,某些黑客就利用工具来一直提交试探你的SQL注入或者其他攻击,下面我们就来看看怎么做防御

2

我们通过使用 session+token 凭证来设置一段 form 的唯一性,为每一个form都生成一个随机并加密的 token 验证数据,当完成提交,我们就销毁掉这个 token 从而达到form的有效性只有一次

3

编辑 form.php,开启session,并产生一个加密token保存到 session 中,并在form表单中加入一个隐藏域用来提交token

5

好了,这样一个防止跨域提交表单的验证就完成了,这样做,就算黑客拿到你表单中的token值,他拿到自己写的页面或者其他客户端中去提交,都只能是成功一次后就失效,因为当我们验证成功后已经销毁token了,要再次提交表单的话又会是产生新的token了

注意事项

一定不要忘记在验证成功后销毁 token

推荐信息