2012-03-07 51 views
0

我的网站被黑客入侵。它会在我的所有php文件的第一行添加一些脚本。我想要使​​用Netbeans搜索删除该脚本,并用REGEX选项替换。需要REGEX帮助清理被黑客入侵的脚本

看来黑客脚本上有相同的图案

<?php /**/ eval(base64_decode("[SomeRandomString]"])); ?> 

能否请您给我的正则表达式,除去上面的字符串?

这是我砍死完整剧本的例子http://ideone.com/6ltMf

回答

3

像这样的东西你简短的例子相匹配,并且您粘贴的一个:

$pattern = '~^\<\?php\s?\/\*\*\/\seval\(base64\_decode\(\".*?\)\)\;\s?\?\>~' 
// You might need to incorporate the multi-line option at the end of the pattern 

事后诸葛亮:今后你应该考虑使用版本控制系统快速重置所有更改的文件。

+0

你能解释在字符串的第一个和最后的'〜'的含义吗? – GusDeCooL 2012-03-07 16:50:03

+1

'~'是PHP的正则表达式引擎需要的模式分隔符。它们表示模式的开始和结束。该字符本身是任意的 - 很多人使用'/'(PHP在'preg_match()'的示例中使用'/''http://php.net/preg_match)。我更喜欢模式中不存在的字符来帮助提高可读性(就好像正则表达式有任何可读性的希望:p)。 – 2012-03-07 16:53:37

+0

测试并尝试删除'〜'字符,我不知道也许该字符只能在PHP中工作,但在这里我使用Netbeans替换功能。像魅力一样工作。谢谢。 :D – GusDeCooL 2012-03-07 16:54:33

0

为什么不只是手动删除它?如果您的文件太多,自动化听起来不错。由于它是对字符串进行解码并将其评估为PHP表达式,因此如果它真正实现了自动自动化,则它应该对每个文件都是相同的。只需复制字符串,然后告诉脚本在所有.php文件中查找确切的字符串。我相信这件事情就像

"eval(base64_decode("aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydC.......));" 

的特殊字符是:[\^$ | * +(),如果你要搜索他们需要用一个“\”,以便先于他们?匹配正常工作,所以你的RE变成:

"eval\(base64_decode\("aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydC.......\)\);" 

你将需要检查字符串不包含任何更多的特殊字符。你也许只是想重新安装你的PHP版本,这取决于这个病毒的作用,因为它,但你应该只是谷歌“eval base64_decode”,这就是我发现有关该病毒的论坛帖子。