需要清理垃圾邮件数据库

MrT*_*hie 0 php mysql database

所以有几件事情.首先,生病了,我似乎无法专注于正确地解决这个问题,其次,它让我难以理解如何处理这个问题.

所以我有一个客户端,它有一个基于旧代码的旧网站.代码中存在一些极端漏洞,允许注入和攻击 - 这种情况发生了.自从我参与这个项目以来,我已经收紧了很多东西并且没有真正的问题.但我刚刚发现了一些看起来像以往黑客的问题.

因此,在数据库中,他们有一个名为"copy"的字段,用于存储文章的内容.好的,不是最好的名字,但它就在那里.所以这就是问题所在.自从hack以来,有大约52k行,其中包含"viagra"一词.因此,当我仔细查看复制字段和视图源代码时,我就会发现:

for the little kids in the neighborhood.<div style="display: none;">
Run Code Online (Sandbox Code Playgroud)

基本上是打开和关闭的div标签,其样式设置如上所示.因此,它不会在页面上进行直观呈现,但是当您查看源或"搜索引擎蜘蛛"时,他们会看到它.我无法弄清楚为什么上传到article_image目录的.php文件在网站管理员工具中被编入索引 - 直到今晚.现在我知道为什么了.

所以这就是我需要的.因为数据库中的每一行(其中52k)都有作为示例(<div style...>部分)给出的内容,并且它们都出现在最初的内容之后,我需要一些我可以添加到循环中的东西来清除废话复制字段,以便清理混乱.我可以采用str_replace方法 - 但这太长了,不能保证我会得到所有的东西.

那么 - 有什么建议吗?

Nie*_*sol 5

试试这个:(假设"content"是包含文章内容的列的名称)

UPDATE `copy` SET `content`=
     SUBSTR(`content` FROM 1 FOR LOCATE('<div style="display: none;">',`content`))
     WHERE `content` LIKE '%<div style="display: none;">%';
Run Code Online (Sandbox Code Playgroud)

既然你已经表明这些注射始终是文章中的最后一件事,那么这将很好地消除它们.我强烈建议先备份一份备份!