我正在阅读有关如何使 preg_replace() 像 eval() 函数一样,如果我们放置修饰符 /e 这是我的代码:
$fa= '/site'.$_GET['1st'];
$sh= $_GET['replace'];
$ka= 'admin the best over the rest';
echo preg_replace($fa,$sh,$ka);
如果代码在网站上运行,它看起来像:
www.site.com/a.php?1st=//e&replace=phpinfo();
但是有一个问题是修饰符 /e 后面不能跟任何东西,所以如果我们把 ||像这样:
www.site.com/a.php?1st=||//e&replace=phpinfo();
所以我的问题是什么是 ||在这里以及它是如何工作的??
我使用的是 windows 10 和 php 5.2 版
答案 0 :(得分:0)
|
分隔正则表达式中的替代项;例如/abc|def|ghi/
匹配 abc
、def
或 ghi
。
当您编写 1st=||//e
时,生成的正则表达式将为 /site||//e
。其中两个选项是空字符串,它将匹配每个字符前后的空字符串。因此,这将为 phpinfo()
中的每个字符调用 $ka
。
实际上,您应该得到一个错误,因为您在正则表达式的末尾有两个 /
。它应该是 1st=/e
或 1st=||/e
。