慎用preg_replace的/e修饰符

最近,wooyun上面爆了一个ThinkPHP的漏洞(最新版已经修复),以前也是我用过的第一个框架,昨晚花时间重现了一下,查阅了下程序的原理,原来这东西还得慎用。主要是由mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 这个函数引起的,在官方说明中,

/e 修 正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确 保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错 误。

继续阅读“慎用preg_replace的/e修饰符”