博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
更改文件内容并保存
阅读量:7154 次
发布时间:2019-06-29

本文共 1497 字,大约阅读时间需要 4 分钟。

  hot3.png

这两天公司负责的一个网站被不知名的人将网站程序中的所有 *.php 文件都加上了一段如下代码:

好吧,经过推敲鉴定这是网站被黑了的节奏,不幸的是程序并没有备份文件。那么有4种方法:

    1、一个一个文件的改(虽然保险,但是这要改到猴年马月啊)

    2、写一个方法,将文件中的这段代码去掉
    3、重新写一份代码(这是作死的节奏啊,重写啊,不可能的吧)
    4、华丽的将此网站抛弃(那更是不可能滴,它可是充实我们荷包的重要使者 )

这真是有爆粗口的冲动啊,但我们是文明人不是,不说脏话。无奈之下只能忍怒低头写代码;

分析一下:首先要将网站根目录下所有的php文件都要找出来,然后将文件中的那段不知名的代码给咔嚓掉,最后保存文件。为了一个不落的更改所有有误的文件,我们可以采用递归函数来达到目的。

在网站的根目录下建一个find.php的文件来写这个方法,我们知道PHP中有个scandir() 函数;这个函数返回一个数组,包含指定路径中的文件和目录。有不了解的可以看看: 我们先试着输出所有的目录和文件:

function changeScandir($dir){	foreach(scandir($dir) as $single)	{		$sub_dir=$dir.DIRECTORY_SEPARATOR.$single;		if($single=='.'||$single=='..')			continue;		elseif (is_dir($sub_dir))		{			echo 'Directory '.$sub_dir.'
'; changeScandir($sub_dir); }else{ echo 'File '.$single.'
'; } }}changeScandir('.');

在此之前,我没有构造$sub_dir这个变量而是直接将$single传入递归,结果可想而知是不能正常运行的,还搞到Apache崩溃了。一开始我也很纳闷,还上网找了资料可是无果,后来跟我的同事一起讨论了一下,发现了是路径有问题。所以哇,遇到问题自己不能解决的时候一定要找找资料,再不行那就求助吧,多个人的力量总是比一个人的力量要大的;这可不是什么丢脸的事哦。

测试之后是可以正确输出所有目录和文件的,那接下来就好办了。我们只要判断文件是不是php文件,然后看有没有匹配到那可恨的代码,匹配成功就将这段代码替换为空,然后保存:

/', $cn, $arr); if(count($arr)>0) { //替换内容,更改文件内容 $result = preg_replace ('/<\?php(.*)x2f"\); \?>/', '', $cn); file_put_contents($sub_dir, $result); //记录更改了的文件 $str = $sub_dir."----Change Success!\n"; file_put_contents('test1.txt', $str,FILE_APPEND); } fclose($f); } } }}changeScandir('.');

至此,已经完成了我们所要达到的目的了;值得注意的地方就是要保证路径不出错,那其它的就没什么难度太大的问题存在了。好吧,最后让我小小的鄙视一下那些随意篡改别人程序的Hacker,请做文明Hacker哇!

转载于:https://my.oschina.net/frylan/blog/172621

你可能感兴趣的文章
mysql总结
查看>>
agc031
查看>>
初级英语
查看>>
关于在Cocos2dx中注册触摸事件——Lua
查看>>
java中容器类型的数据
查看>>
DB数据源之SpringBoot+Mybatis踏坑过程实录系列(一)
查看>>
【2016.3.16】作业 VS2015安装&单元测试(1)
查看>>
JS中的prototype
查看>>
go 通过 channel 控制并发任务
查看>>
集合 ArrayList 类
查看>>
服务器主逻辑代码的重构
查看>>
设置DataGridView中表头颜色
查看>>
MySql的一些小用法
查看>>
linux CANopenSocket 初试
查看>>
python print 显示不同的字体
查看>>
软考高级(二)
查看>>
linux tar.gz zip 解压缩 压缩命令
查看>>
java第三次作业
查看>>
C++ unordered_map map
查看>>
念奴娇·登多景楼
查看>>