免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5992 | 回复: 0
打印 上一主题 下一主题

php输入类型的安全控制简单方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-01 11:25 |只看该作者 |倒序浏览
我们知道php本身是一种弱类型的编程语言,在WEB应用中,输入方式通常是用户的POST/GET等提交方式,而针对用户提交的数据,数据校验就必不可少了。

简单地如一个GET提交用于查询数据库,http://xx.com/action?id=123
我们在校验时只要简单地对提交进行处理:
  1. $id = intval($_GET['id']);
复制代码
以上即可,这非常简单,但却极其必要,一旦在开发或日后维护中遗漏,轻则数据泄露,重则系统被人控制。

解决的方法,就是“命名约定”,简单地说,任何的提交都要符合规定,如原本:
http://xx.com/action?id=123

那么提交的id应当命名为:
http://xx.com/action?i_id=123

我们发现id前面多了一个”i_”前缀表达式,这是什么意思呢?i就是表示他是一个int类型的数据,
这在提交后我们可以在自己的开发框架或者输入控制层中统一地校验。

另外,我们还可以定制”d_”双精度型,”b_”布尔型,”a_”数组型,”s_”字符串型等前缀,针对字符串型这样的复杂类型,在输入时通常无法统一地校验,这时我们还可以更加深入地定制规则,如一个例子”s_olyd_name”,”s_”表示字符串,”olyd_”表示使用olyd这个对象(或函数)进行校验。

对于一些无法变更的提交(如其它原有的提交方式已经无法变更),我们可以定制一个中间层,将
http://xx.com/action?id=123
这种方法转变为
http://xx.com/action?i_id=123

具体方法可以通过配置特定参数(类似URL路由)来解决:
  1. array(
  2. 'id' => 'i_id',
  3.   …
  4. );
复制代码
经过以上的规范,可以大大地避免了偶发情况,以及不经意引起的严重安全问题,并在一定程度上提高了开发效率,提高了代码的可维护性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP