php的filter扩展小技巧
做为一个合格的web开发人员,一定会牢记一个原则――永远不能相信用户输入的数据,行走江湖,安全第一是很重要的。用户通过表单或url传过来的数据,一定要仔细检查过了,才往后台数据库里存进去。在一个成熟的开发团队里,贯彻这个原则不成问题;但是如果在一个新人老手混搭的小team里,很容易就忽视了这个问题,那么各种安全漏洞比如跨站攻击,sql注入等等真是防不胜防。
实际上,用php 5自带的filter扩展能够较好的解决这个问题。我在从前的blog里记录了filter扩展的常规用法――直接利用filter来校验数据,这样有不少额外的代码量,所以我得介绍一个比较偷懒的办法――自动对所有输入变量进行过滤,这只需要对php.ini增加一行配置,然后重启apache或fastcgi让php配置生效。
filter.default="special_chars"
开启了这项配置后,会自动使用filter_input方法对$_GET, $_POST, $_COOKIE, $_REQUEST以及$_SERVER变量进行过滤转义。配置中special_chars是常量FILTER_SANITIZE_SPECIAL_CHARS的缩写,它能自动转义大部分危险字符例如: '"<>。而php手册对它的解释是:
HTML-escape '"<>& and characters with ASCII value less than 32, optionally strip or encode other special characters.
在这个情况下,新人们写出这样的代码我也不会太担心:
-
$foo = $_GET['foo'];
-
echo $foo;
在部分场合,我们可能还是需要未转义的变量,比如某个ajax接受的参数是一段json串,用这段代码即可获得原始数据:
-
$foo = filter_input (INPUT_GET, 'foo', FILTER_UNSAFE_RAW);
fitler扩展与yahoo使用的yiv如出一辙,印象里似乎就是yahoo对yiv做了些修改贡献给php社区,但是暂时没找到出处。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Volcano 来源: 某人的栖息地
- 标签: filter
- 发布时间:2010-05-05 13:40:37
- [46] 界面设计速成
- [40] 视觉调整-设计师 vs. 逻辑
- [40] Oracle MTS模式下 进程地址与会话信
- [38] android 开发入门
- [38] IOS安全–浅谈关于IOS加固的几种方法
- [36] 程序员技术练级攻略
- [36] 如何拿下简短的域名
- [35] 图书馆的世界纪录
- [35] 【社会化设计】自我(self)部分――欢迎区
- [32] 读书笔记-壹百度:百度十年千倍的29条法则