日期:2014-05-17  浏览次数:20387 次

php的一个函数使用注意

???????? php中有一个函数extract(),不少人都使用过,但是这个函数时间上存在一个小小的隐患,如果使用不当可能会造成安全上的问题。

extract定义 写道
PHP extract() 函数从数组中把变量导入到当前的符号表中。

对于数组中的每个元素,键名用于变量名,键值用于变量值。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。

本函数返回成功设置的变量数目。

?一般第二个参数我们都会懒得设置,这样实际上存在一个变量覆盖的问题,由于这个函数的隐蔽性,很多时候我们会忽略掉它的危害性,结果就会造成黑客通过对数组元素的控制,或者说伪造,直接可以覆盖掉已经存在的某些变量,可以导致多种问题,包括本地包含漏洞,sql注入漏洞(通过这个函数很容易绕过变量检查),而且由于它的隐蔽性,很多人会忽略掉。明显的一个例子

???

乌云上的一个报告 写道
http://www.wooyun.org/bugs/wooyun-2010-03990

?就是phpcms中的这个问题,而且通过对phpcms v9代码的查阅,里面错误使用extract的地方还有很多。这是值得程序员注意的一个问题。?