我在我的一个项目中使用Zend Framework,文件Zend / Uri / Http.php有一个函数validateQuery,它使用preg_match验证给定的查询。
它正常工作正常,但我有一个非常长的paypal url查询字符串,大约1 500个字符,preg_match
函数无声地为此查询失败。
我正在使用PHP版本。 5.4.7因此我没有pcre.backtrack_limit = 100000的限制。
现在我已经修改了Zendframework中的文件,不验证超过1000个字符的任何查询,但这显然不是正确的解决方案。
根据其中一条评论,我试图在独立页面中使用另一个非常长的查询和preg_match并且我有相同的错误,我将我的测试数据粘贴在下面以供参考。
$query = 'search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8';
$pattern = "/^(?:%[[:xdigit:]]{2}|[A-Za-z0-9-_.!~*'()\[\];\/?:@&=+$,])*$/";
echo preg_match( $pattern, $query );
答案 0 :(得分:0)
现在我已经修改了Zendframework中的文件,以便不验证超过1000个字符的任何查询,但这显然不是正确的解决方案。
嗯,这对我来说不是太错了。 1000个字符听起来像一个理智的限制,允许URL输入和拒绝大于此的一切。大型URL似乎也利用了验证器,因此我会真正过滤它们,直到软件供应商修复了它们库中的这个缺陷。
检查供应商是否有支持选项,以了解您发现潜在错误或缺陷的情况。由于这与验证有关并且具有安全隐患,因此我非常确定供应商会很乐意了解这个问题。