Regex 使用perl从一堆php文件中删除很难的字符串
我越来越秃顶,因为我把头发拔了出来,因为这应该是一件简单的事情。我在一些PHP文件(100个)中留下了一段黑客企图的片段 字符串为: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
<?*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'`