技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> php的filter扩展小技巧

php的filter扩展小技巧

浏览:1978次  出处信息

做为一个合格的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.

在这个情况下,新人们写出这样的代码我也不会太担心:

PHP:
  1. $foo = $_GET['foo'];
  2. echo $foo;

在部分场合,我们可能还是需要未转义的变量,比如某个ajax接受的参数是一段json串,用这段代码即可获得原始数据:

PHP:
  1. $foo = filter_input (INPUT_GET, 'foo',  FILTER_UNSAFE_RAW);

fitler扩展与yahoo使用的yiv如出一辙,印象里似乎就是yahoo对yiv做了些修改贡献给php社区,但是暂时没找到出处。

建议继续学习:

  1. 是时候使用filter:drop-shadow了    (阅读:4035)
  2. Cuckoo Filter:设计与实现    (阅读:3069)
  3. CSS实现HTML元素透明的那些事    (阅读:2843)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1