PHP apache_lookup_uri函数bug分析
作者从PHP中一个看似冷门的`apache_lookup_uri`函数入手,深入剖析了其参数类型处理上的一个历史Bug及其潜在安全影响。文章发现,当以数组形式向该函数提交参数时,虽然内部会强制转换为字符串“Array”通过验证,但返回的object对象会保留原始输入,其中`the_request`字段可包含未经处理的XSS代码。 深入源码后,作者指出问题根源在于PHP 5.2.x版本中函数参数被错误地定义为`zval`类型,允许了非字符串输入。尽管`apache_lookup_uri`函数本身不直接输出,但若后续代码未对返回对象进行校验直接使用,便可能引发安全问题。文章最后对比了PHP 5.3.1版本的修复方案,新版通过`zend_parse_parameters`严格限定为字符串类型,从根本上杜绝了此类参数混淆问题,展现了PHP内核在参数解析安全性上的演进。