我拖着疲惫的身躯,努力打开眼皮在写...... 昨晚弄到12点,我感觉应该弄好了。

故事开头是这样的:我呢朋友有个网站需要开发,我当时没时间就包给外面的公司了,由于外面公司维护费用比较贵。

那么网站维护就交给我了,我呢做软件开发很多年了,没用过PHP,所以算是新手。

年前开始的某一天网站首页突然就被修改了,点链接都停在首页,且偶尔会打开菲律宾的博彩网站。

这下我开始紧张了,这网站访问量还比较大,不能出乱子啊。

1.爱理不理

那么我赶快请外包公司的帮我看看,可能是开发阶段结束了,没有给维护费用。

基本上对我是爱理不理,我说要电话给他,他就说在开会,当然你说在开会我就不好意思打搅了。

我其实也不是想他们帮我解决问题,也就是想更多的了解一些网站的结构信息和服务器信息,好做出一些哪里有问题的判断。

2.毫无头绪

服务器是外包公司代理管理的,那么我有的就是远程FTP上去改网站的权限。

那么我在想着首页怎么能被别人改了?难道黑客有我FTP的密码?

于是把首页改回来,改了一次密码。好了一天后面还是又有问题了。

会不会是我ftp保存了密码 出问题了?后来又改了一次密码,每次连接不保存密码。

还是一样,首页改好一天之后,貌似又出现问题。

奇怪了,由于我用的开源的FTP--FileZilla,我在想,不会是这个开源工具里面有植入病毒或木马吧。

果断换了个ftp工具,改了个ftp密码,修改回正确主页,过了一天还是有问题。

我要奔溃了~~  (作为程序员,第一次感觉这么的无助,因为它不是你所熟悉的语言和开发,运行环境)

3.了解框架

排除了ftp工具的问题之后,我开始怀疑是不是别的问题了,在网页里搜了一下“php index.php被修改”

搜出来一堆关于phpCMS框架的问题,然后一股脑发了7,8个关于问题解决的链接给外包公司。

可能这些链接提醒了他们,他们发现可能是他们使用的开源框架有漏洞,于是乎给框架打上了补丁。

4.打上补丁,还有虫,为什么呢?

打上补丁,以为万事大吉了,确实好了一个星期(这一个星期刚好我也没对网站做任何操作和修改)

太好了,补丁打上,好了。(我看补丁上说漏洞补丁刚好是12月9号左右出来的,刚好能对得上主页被修改的日期,参考网站https://bbs.ichunqiu.com/thread-48687-1-1.html)

可惜幸福来得突然也去得快,我按客户需求又开始修改网站了。

改完,上传,测试工作之后,第二天一看。我滴乖乖,主页又被替换了,我要奔溃了。

为什么打算了补丁还有虫啊?

5.咨询高手

没办法了,只好到处找资料,看代码,分析TP5.0的框架,工作原理,就想找到点蛛丝马迹。

群里问了下高手,得到了两个关键词“路由”,“查看日志”。

高手们的帮忙,我真的很是感激。

“这个还要我教啊”--这句话 对我触动也是很大。我们作为前辈(有些领域我还是很资深的^_^)是不是考虑下新手的情况和心情。

我们刚入门确实不知道该如何下手,当然对于前辈来说,这些都是不值一提的理所当然。

(你可能头脑里又在想,查看日志应该是下意识行为啊,嗯,我主要是桌面应用比较多,一下子确实忘了考虑网站的log了)

https://www.kancloud.cn/yunzhiclub/thinkphp5guide/165007

6.灵光乍现

“路由,路由”,然后网上搜tp5.0,路由设置,参考bug的补丁,发现建议强制路由。

那么设置了一下强制路由,然而网站不工作了......(当然应该是外包的没有按统一方法写代码)

那没办法,不能使用强制路由。

那查看日志吧,“日志,日志”,在哪里看哪一个呢。我在网站根目录上一通寻找。

眼睛突然一亮“wwwlogs”,嘿嘿,莫名的兴奋起来,这底下说不定有好东西。

问了下外包公司的,说“这底下log没什么用”。

我实在是也没别的办法了,先看看再说吧......

7.应该搞定了

日志一查,好家伙,发现问题了,下面这明显是不正常行为。应该是一个“后门”。

浏览到那个目录,查看了一下内容,果然index.php和.htaccess是个后门,果断删除。

仔细查了一遍,还有用临时文件做后门的,果断删除。

根据日志,还发现了其他后门,然后仔细回想一下,都符合上了服务器网页被修改的时间和行为。应该这次搞定了吧......

8.一些思考

这次抓虫花了我很多时间,也承受了来自客户的巨大压力。

特别是对某个东西不太理解作为新手那种的彷徨无助的感觉。

一些感悟如下:

  1. 商业的尽量少用开源代码
  2. 要用开源代码,实时关注更新,注意打补丁
  3. 深入了解开源框架的原理,好定位问题
  4. 软件前辈们应该多以谦虚的态度,帮助后辈们,有时候有些对于你是常理性的东西,他们真的很无助。多一些信息,能省他们很多时间。
  5. 日志,日志,日志!对于抓虫很重要!

觉得是很好的经历,所以写下来,作为以后的回忆,也希望抓虫的过程,能给大家一些启发~~

PHP(SentCMS)网站 “新手”捉虫记的更多相关文章

  1. 捉虫记(四)线程安全导致的HighCpu

    一个朋友QQ群里说网站启动后会cpu很高,想要帮忙看一下dump. 1.打开windbg加载dump文件后第一个命令lmf,这个命令显示加载的dll以及路径,这样子可以找个dll来帮忙加载sos,(额 ...

  2. 捉虫记2:windows程序句柄泄露的上下文环境

    作为程序员,开发程序是基本功,而调试程序也是必不可少的技能之一.软件在主体功能开发完成后会经历各个阶段的测试,才会被发布.在测试过程中,出现较多的可能就是内存泄漏,句柄泄漏,异常崩溃等属于非功能型的软 ...

  3. [原]捉虫记3:_ConectionPtr指针调用open失败

    背景 产品使用MySQL来存储报警服务产生的报警.在报警服务的组件中使用ADO接口 客户方有两台计算机,一台计算机A用来组态,且可以对设备进行调试,操作系统是Win7 64bit 专业版,安装了VS2 ...

  4. 捉虫记:SHGetSpecialFolderPath返回错误码为2

    通常我们想获得系统的一些路径时,都会使用一些Shell函数.比如SHGetSpecialFolderPath,SHGetFolderPath,SHGetKnownFolderPath等,传入我们想要的 ...

  5. MapReduce全局变量之捉虫记

    全局变量 写MapReduce程序时候,有时候须要用到全局变量,经常使用的全局变量实现由三种方式: 通过作业的Configuration传递全局变量.作业初始化的时候.conf.set(),须要的时候 ...

  6. 一次MySQL(INNODB存储引擎) 死锁捉虫记

    前言 任何系统不管在什么阶段都需要关注生产环境错误日志,最近几个月内,发现偶尔会出现数据库死锁情况.以前碰到的数据库类错误大部分是SQL语法造成的错误,来到新东家之后才第一次碰到死锁情况,以前是搞游戏 ...

  7. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  8. 《Power Query数据清洗实战》捉虫……

    先道歉,<Power Query数据清洗实战>里,有虫-- 谢谢大家帮忙捉虫了. 谢谢法叔,他捉了四只--(汗) 112页第倒第二行,[追加查询],应是[合并查询]. 151.154.15 ...

  9. ico图标和制作网站(比特虫)

    1.怎么找到网站的图标: 网址/favicon.ico 代码引入 <link rel="icon" href="//www.jd.com/favicon.ico&q ...

随机推荐

  1. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(5)- 软件优化

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之软件优化. 前面痞子衡已经初步实现了Jays-PyCOM的串口功能,并且通过了最基本的测试,但目前 ...

  2. SDWebImage源码解析

    但凡经过几年移动开发经验的人去大公司面试,都会有公司问到,使用过哪些第三方,看过他们的源码嘛?而SDWebImage就是经常被面试官和应聘者的提到的.下面将讲述SDWebImage的源码解析以及实现原 ...

  3. win10安装ubuntu16.04双系统

    前话:因为感兴趣吧也是专业需要,所以自学了U盘重装系统以及在win10的情况下安装Ubuntu16.04双系统.借此博客,记录下我安装Ubuntu的过程,方便日后回忆. 正因如此,本篇博客会写的十分简 ...

  4. MySQL优化特定类型的查询

    优化关联查询 如果想要优化使用关联的查询,我们需要特别留意以下几点: 确保ON或者USING子句中的列上有索引.在创建索引的时候需要考虑到关联的顺序.当表A和表B用列c关联的时候,如果优化器的关联顺序 ...

  5. 关于token和refresh token

    最近在做公司的认证系统,总结了如下一番心得. 传统的认证方式一般采用cookie/session来实现,这是我们的出发点. 1.为什么选用token而不选用cookie/session? 本质上tok ...

  6. 为什么说Java程序员到了必须掌握Spring Boot的时候?

    摘要: SpringBoot的来龙去脉. 原文:为什么说 Java 程序员到了必须掌握 Spring Boot 的时候? 微信公众号:纯洁的微笑 Fundebug经授权转载,版权归原作者所有. Spr ...

  7. java-HashMap默认机制

    HashMap:键值对(key-value): 通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value. 默认是1:1关系: 存在则覆盖,当key已经存在,则利用新的value ...

  8. [JS设计模式]:单例模式(1)

    什么是单例模式 所谓单例,就是一个类只有一个实例,实现的方法一般是先判断是否存在实例,如果存在就直接返回,如果不存在就创建了再返回.这样确保了一个类只有一个实例对象. 实现的单例有很多种方式,最简单的 ...

  9. 如何程序化的构造Hibernate配置 // How to initialize Hibernate programmably

    Java为什么被人诟病,因为一切都是过度设计.Hibernate其实就是实现了一套JPA的ORM,不过用极度冗赘的配置方式,nodejs Sequelize.js,甚至Python SQLAlchem ...

  10. nodejs 使用 js 模块

    nodejs 使用 js 模块 Intro 最近需要用 nodejs 做一个爬虫,Google 有一个 Puppeteer 的项目,可以用它来做爬虫,有关 Puppeteer 的介绍网上也有很多,在这 ...