J'ai reçu une base de données MS SQL 2000 à laquelle un logiciel malveillant a été injecté. Le script malware est comme suit:Impossible de supprimer le script injecté des lignes de la base de données
<script src=http://www.someAddress.ru/aScript.js></script>
Maintenant, je veux retirer ce morceau de code à partir des lignes de la table.
En tant que test, j'inputed < h1> Test </h1> sur une ligne, et a dirigé avec succès la requête suivante:
UPDATE myTable
SET description = REPLACE (description, '<h1>','')
WHERE id = 2;
Cette supprimé la balise h1.
Mais essayer la même chose avec la balise de script ne fonctionne pas:
UPDATE myTable
set description = REPLACE (description, '<script src=http://www.someAddress.ru/aScript.js></script>','')
WHERE id = 2
Pourquoi cela ne fonctionne pas?
MISE À JOUR 2
WOHO! J'ai trouvé la solution! J'utilise le code folloing, que je trouve ici: http://www.tek-tips.com/viewthread.cfm?qid=1563568&page=3
-- Look for open and close HTML tags making sure a letter or/follows < ensuring its an opening
-- HTML tag or closing HTML tag and not an unencoded < symbol
CREATE FUNCTION [dbo].[udf_StripHTML]
(@HTMLText VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0
AND @End > 0
AND @Length > 0
BEGIN
SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN Replace(LTRIM(RTRIM(@HTMLText)),' ',' ')
END
GO
Pour supprimer les balises HTML/scripts, je lance la requête suivante:
UPDATE mytable
SET description = [dbo].[udf_StripHTML](description)
//WHERE id = 35;
Cela fonctionne parfaitement. Notez que ce script supprime TOUS les fichiers html. Donc, si je veux seulement supprimer le script <>, je remplace simplement '<' par '< script'.
Ma première pensée serait des sauts de ligne ... –
@rexem: pouvez-vous élaborer? – Steven