从某些表中删除垃圾邮件SQL注入

时间:2015-09-26 06:20:37

标签: sql sql-server replace sql-injection

我有一个用于填充网站的SQL Server表

该网站遭到攻击,可能使用了一些SQL注入技术,此表中的许多列(文本列)都包含一些HTML,通常类似于<div>some stuff and some links</div>

我只想删除第一个<div>之后的所有内容:

UPDATE MyTable
SET MyField = REPLACE (MyField,
                       SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)), '')
WHERE MyField LIKE '%<%'

它在nvarcharchar列上运行良好,但它不适用于nvarchar(max)列。我收到这个错误:

  

Msg 8152,Level 16,State 10,Row 1
  字符串或二进制数据将被截断。

     

消息3621,等级0,状态0,行1   声明已经终止。

如何从nvarchar(max)列中移除此内容?

1 个答案:

答案 0 :(得分:1)

您应该在字符串中减去LEN(MyField) '<'的位置:

UPDATE MyTable
SET MyField = REPLACE (MyField,
                       SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)-CHARINDEX('<',MyField)-1), '')
WHERE MyField LIKE '%<%'

我还建议您搜索'<div>'子字符串,以避免丢失以&#39;&lt;&#39;但不是垃圾邮件。