Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用perl从一堆php文件中删除很难的字符串_Regex_Perl_Replace - Fatal编程技术网

Regex 使用perl从一堆php文件中删除很难的字符串

Regex 使用perl从一堆php文件中删除很难的字符串,regex,perl,replace,Regex,Perl,Replace,我越来越秃顶,因为我把头发拔了出来,因为这应该是一件简单的事情。我在一些PHP文件(100个)中留下了一段黑客企图的片段 字符串为: <?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?> 我认为使用perl命令行,例如: perl -pn -i.bak -e "s{<\?\*god_mode_on\*/eval\(base64_decode\(""\)\); /\*god_mode_off\*/ \?&g

我越来越秃顶,因为我把头发拔了出来,因为这应该是一件简单的事情。我在一些PHP文件(100个)中留下了一段黑客企图的片段

字符串为:

<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>

我认为使用perl命令行,例如:

perl -pn -i.bak -e "s{<\?\*god_mode_on\*/eval\(base64_decode\(""\)\); /\*god_mode_off\*/ \?>}{}g;" `find . -name '*.php'`
perl-pn-i.bak-e“s{}{}{}g;”`find-名称'*.php'`
将整齐地产生一个备份和剥离字符串,但它似乎谨慎地避免这样做。我想我现在可能有perl盲症,因为我已经看了这么长时间,所以希望有人能直接看到问题,让我知道我有多慢;-)


谢谢

您使用的任何shell都可能解释反斜杠吗?您可能需要转义它们(使用另一个反斜杠),以便它们实际上作为反斜杠传递给perl。

跟踪所有需要转义的内容并不简单。例如,看起来您没有在双引号字符串中转义双引号。Perl有一个函数可以帮助您解决这个问题:

print quotemeta '<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>';

===>  \<\?\*god_mode_on\*\/eval\(base64_decode\(\"\"\)\)\;\ \/\*god_mode_off\*\/\ \?\>
请注意,对于
-e
命令行开关的参数,我使用了单引号而不是双引号。否则,您还必须担心shell插入您的输入并打开一整罐蠕虫


(另外,
-pn
开关是冗余的——使用
-p
就足够了)

您是否收到错误?它以什么方式失败?无论如何,你真的应该从备份中恢复你的文件,而不是试图以这种方式删除黑客。你的双引号字符串中有双引号。没有错误,只是没有更改。如果该站点是我的,我们将有一个备份;-)我可以做一些重建工作,弥补服务和设置中的明显漏洞。没有什么是完美的,但至少人们知道它被黑客攻击了,很多人甚至不知道。感谢大家这么快的反应。
perl -p -i.bak -e \
  's{\Q<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>\E}{}g' \
  `find . -name '*.php'`