0

所以有几件事。首先,生病了,我似乎无法像我应该的那样专注于弄清楚这一点,其次,这让我对如何处理这个问题感到困惑。

所以我有一个客户,他有一个基于旧代码的旧网站。代码中存在一些允许注入和攻击的极端漏洞——这种情况发生了。自从我进入这个项目以来,我已经大大收紧了事情,并没有真正遇到问题。但我刚刚发现了一些似乎是以前黑客攻击中挥之不去的问题。

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

for the little kids in the neighborhood.<div style="display: none;">

基本上打开和关闭的 div 标签具有如上所示的样式集。所以它不会在页面上直观地呈现,但是当您查看源代码或...“搜索引擎蜘蛛”经过时,他们会看到它。直到今晚,我都无法弄清楚为什么上传到 article_image 目录的 .php 文件会在网站管理员工具中被索引。现在我知道为什么了。

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

所以 - 有什么建议吗?

4

1 回答 1

5

试试这个:(假设“内容”是文章内容的列名)

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

由于您已经指出这些注射始终是文章中的最后一件事,因此这将很好地消除它们。不过,我强烈建议先备份一份!

于 2013-01-11T02:44:25.387 回答