1

我的一个客户的一个数据库被黑了。我正在尝试重建数据。该站点正在运行带有 SQL Server 数据库的经典 ASP。我相信我已经找到了黑客的弱点,并暂时删除了该入口点。

数据库中的每个文本列都附加了一些 html 标记和内联 script/js 标记。

下面是一个字段示例:

all</title><script>
    document.write("<style>.aq21{position:absolute;clip:rect(436px,auto,auto,436px);}</style>");
</script>
<div class=aq21>
    <a href=http://samedaypaydayloansonlineelqmt.com >same day payday loans online</a>
    <a href=http://samedaypaydayloan

此示例在列中的Users表中UserRights。初始值为all,但随后您可以看到附加的链接。

我需要编写一个正则表达式脚本,它将搜索数据库中每个表的每一列中的所有字段并删除这个额外的标记。

本质上,如果我尝试匹配</table>,那么该字符串及其附加的所有内容都可以替换为空白字符串。

对于同一列中的每个字段,所有这些附加字符串都是相同的。但是,每个表中有多个列。

这就是我到目前为止一直在做的事情,替换被黑的部分,但是一个好的正则表达式可能会帮助我,尽管我的正则表达式技能......很糟糕。

UPDATE [databasename.[db].[databasetable]
set 
UserRights = replace(UserRights,'</title><script>document.write("<style>.aq21{position:absolute;clip:rect(436px,auto,auto,436px);}</style>");</script><div class=aq21><a href=http://samedaypaydayloansonlineelqmt.com >same day payday loans online</a><a href=http://samedaypaydayloan','');

感谢任何正则表达式帮助和/或提示。

4

2 回答 2

2

这就是我最终要做的(非常感谢@Bohemian):

我浏览了每个表并检查了哪一列受到了影响。然后我在每一列上运行以下脚本:

UPDATE [tablename]  
set columnname = substring(columnname, 1, charindex('/', columnname)-1)
where columnname like '%</%';

如果该列中有任何标记,那么我最终会手动更新这些记录。(幸运的是我只有几张唱片)。

如果有人有更好的解决方案,请随时发表评论。

谢谢!

于 2012-12-20T14:49:48.000 回答
2

由于不好的东西以 a 开头<,而且这是一个通常很难找到的不寻常字符,我会使用普通的文本函数,如下所示:

update mytable set
mycol = substr(mycol, 1, charindex('<', mycol) - 1)
where mycol like '%<%';

并有条不紊地对每个表的每一列进行此操作。

请注意,我只是在猜测要使用的正确函数,因为我不熟悉 SQL Server,但你明白了。

我欢迎有人编辑 SQL 来改进它。

于 2012-11-30T06:14:48.663 回答