眉山东坡论坛

 找回密码
 注册账号

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2324|回复: 0
收起左侧

[资料经验] 批量替换消除论坛被注入广告,非正则表达式方式

[复制链接]
发表于 2016-8-4 23:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转东坡论坛

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
        进后台常规管理,突然看到回收站里有几千贴.....几千贴,啥情况?赶快查下后台,原来是贴子被其中一名管理员编辑了,这种情况应该是使用简单密码被暴力穷举了,想起之前几天才让他改了密码来,估计怕自己忘掉使用了比较简单的密码,打电话告知事件后把他的密码改成稍复杂一些的。

        贴子怎么办呢?第一反应就是使用正则表达式来解决,通过查询,把正则表达式写出来了才发现原来update居然不支持正则表达式,没办法,再百度吧。工夫不负有心人啊,终于给我查到类似的语句,下面详细给大家说说步骤供大家参考:

第零步:用编辑贴子功能取出被注入样品,注意这三行都有三个变量:

  1. "[b][url] [img] [url=http://www.138073.com]www.138073.com[/url] [/img] [size=6][color=red]SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投め注任何游戏顶级信用め提现即时到账SO.CC[/color][/size] [/url][/b]"
  2. "[b][url] [img] [url=http://www.138193.com]www.138193.com[/url] [/img] [size=6][color=red]SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投╳注任何游戏顶级信用╳提现即时到账SO.CC[/color][/size] [/url][/b]"
  3. "[b][url] [img] [url=http://www.138206.com]www.138206.com[/url] [/img] [size=6][color=red]SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投ケ注任何游戏顶级信用ケ提现即时到账SO.CC[/color][/size] [/url][/b]"
复制代码


第一步:把前、中、后的确定字符串替换为易判断内容,中间变量留下,目的是减少字符好计算字符量。
使用 UPDATE pre_forum_post SET message=REPLACE(message,'要删除的代码','替换后的内容或者直接留空删除');
其中pre_forum_post是数据库的数据表名称,如果你的不是这个请改为自己的数据表


  1. UPDATE pre_forum_post SET message=REPLACE(message,'[b][url] [img] [url=http://www.]www.','wycfl'[/url]);
  2. UPDATE pre_forum_post SET message=REPLACE(message,'.com [/img] [size=6][color=red]SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投','wygcfl');
  3. UPDATE pre_forum_post SET message=REPLACE(message,'提现即时到账SO.CC[/color][/size] [/url][/b]','cwfczb');
复制代码

前面用"wycfl",中间用"wygcfl",后面用"cwfczb",这三个是随意取的不容易重复的词,语句变成:

  1. wycfl109&wygcfl&cwfczb
  2. wycfl206ケwygcflケcwfczb
  3. wycfl206ケwygcflケcwfczb
  4. wycfl9153wygcfl3cwfczb
  5. wycfl076┭wygcfl┭cwfczb
复制代码

第二步:
如果可以支持正则表达式的话,可以这样写来表示更改过后的内容:"^wycfl[0-9]{3}.wygcfl.cwfczb$"
可惜update貌似不能支持,只能取头取尾来判断字符了,注意前面个字符长度为5,所以有个“+5”的行为

  1. update pre_forum_post set message = replace(message, substring(message, locate('wycfl', message),locate('cwfczb', message)-locate('wycfl'+5, message)),'') where locate('wycfl', message)>1;
复制代码
共替换32万多行!
至此,应该一切搞定!其实如果你能把字符数得很清楚的话,你根本不需要第一步,直接写第二步就可以了。
但实际上貌似还漏了一些,大多数已经解决,但仍然有些残留,没有替换干净,测试了两次,残留的内容也不一样。
我也不知道为什么...只好再来一次,把前面一段和后面一段分别写进去:

  1. update pre_forum_post set message = replace(message, substring(message, locate('任何游戏顶级信用', message),locate('cwfczb', message)-locate('任何游戏顶级信用'+8, message)),'') where locate('任何游戏顶级信用', message)>1;
复制代码

影响了 60395 行。 ( 查询花费 29.9961 秒 )
还没弄完...晕,把前面一段和后面一段分别写进去,再来
  1. update pre_forum_post set message = replace(message, substring(message, locate('gcfl', message),locate('cwfczb', message)-locate('gcfl'+7, message)),'') where locate('cwfczb', message)>1;
复制代码

影响了 33379 行。 ( 查询花费 7.0126 秒 )
看了下,貌似这样差不多了,不知道后面两次是缓存没有清干净还是什么别的原因造成...

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|关于我们|小黑屋|爱好群|眉山东坡论坛 ( 蜀ICP备05001993号-1 )

GMT+8, 2018-1-20 22:51

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表