2012-02-16 68 views
2

我的网络服务器被黑客入侵(尽管安全团队告诉我没有任何东西被入侵),而无数的文件有额外的PHP代码生成链接到一些越南网站。通过SSH查找并删除?

鉴于我的服务器上有数以万计的文件,有没有办法让我用SSH进去,并从其中找到的每个文件中删除那行代码?

请在您的回答中具体说明,我只使用了SSH几次来完成一些非常基本的任务,并且不想最终删除一堆我的文件!

回答

2

是的,几行shell脚本就可以做到。尽管如此,我犹豫要把它交给你,就好像出了问题一样,我会因为搞乱你的Web服务器而受到指责。这就是说,该解决方案可以如此简单:

for i in `find /where/ever -name '*.php'`; do 
    mv $i $i.bak 
    grep -v "http://vietnamese.web.site" $i.bak >> $i 
done 

此发现/where/ever下的所有文件*php,并删除在他们http://vietnamese.web.site任何行。它使每个文件的*.bak副本。你跑这一点,一切似乎好后,你可以用

find . -name '*.php.bak' -exec rm \{\} \; 

下一个任务删除的备份将是寻找新的供应商,因为他们不仅遭到黑客入侵,但他们显然不保留备份。祝你好运。

+0

欧内斯特, 但是也有一些影响,如果我只是用*它会检查每个文件的PHP和HTML文件? 当然,实际的代码是一块PHP,因此它在解析之前不是真正的链接。我可以把代替URL? 我会问我的主人是否可以为我做这件事,以确保它正确完成。如果不是,我会放弃它,我不会尝试手动完成。 – Kray 2012-02-16 15:16:59

+0

所有这些命令都非常灵活。如果你想'find'找到所有'* .htm'和所有'* .php'文件,那么你可以使用'find/where/ever -name'* .php'或-name' * .htm''。网址只是一个例子,可以使用任何唯一的字符串来识别您需要删除的行。 – 2012-02-16 15:21:32

0

首先创建一个正则表达式,即坏的代码(只有不好的代码)相匹配,然后运行

find /path/to/webroot -name \*.php -exec echo sed -i -e 's/your-regex-here//' {} \; 

如果一切看起来正常,去掉echo

+0

正则表达式不仅仅是文件中的PHP代码吗? – Kray 2012-02-16 15:21:56

0

我做下面的方式。例如。删除与特定名称或扩展名匹配的文件。

rm -rf * cron.php。 *

室射频* match_string *

其中match_string将是任意的字符串。确保*和字符串名称之间不会有空格。

0
rm -f cron.php.* 

删除所有文件,该文件夹名为cron.php英寸[whereveryouwant]