IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Suppression texte à partir d'un mot


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Suppression texte à partir d'un mot
    Bonjour,

    J'ai été victime d'injection SQL (code pour viagra et compagnie ) qui a été rajouté après mon texte.

    Comme faire (chaine SQL) pour supprimer dans un champ un texte à partir d'un mot (mot compris)

    exemple

    montexte ><script>document.write(unescape

    Je veux supprimer tout le texte après ><script>document.write(unescape

    Merci par avance pour votre aide et également merci pour les conseils de sécurité vu sur le forum

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    En utilisant la fonction InStr()

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Merci mais la fonction ne marche pas dans une requette sql

    J'ai le message
    [Microsoft][ODBC SQL Server Driver][SQL Server]'instr' n'est pas un nom de fonction reconnu

    mon code SQL est del a forme suivante

    chaine = ma_chaine
    mot = mon_mot

    SQL = "UPDATE [matable] SET mon_champ = left(ma_chaine,instr(ma_chaine,mon_lien)) "

    Exite t-il une alternative à instr dans la requette ???

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Nous avons eu le même soucis dans ma boite.
    Si possible utilise une sauvegarde de la base.

    Sinon, voilà une requete faite à partir du script utilisé pour l'injection SQL dont nous avons été victime. Je l'ai recodée un peu pour faire l'opération inverse de celle des hackers:
    1. Elle cherche tous les champs d'une base de données suceptiples d'etre attaqués, les champs textes.
    2. Elle fait un remplacement de la chaine insérée par les hackers et supprime toutes les occurences.
    3. Execute cette requete dans un requeteur de base de données (SQL Server Management Studio) en laissant le "PRINT".
    4. Les requetes vont s'afficher dans l'onglet message execute en une ou deux pour voir et si tout est ok execute la en production.

    Attention, cela peut prendre du temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DECLARE @T VARCHAR(255),@C VARCHAR(255)
    DECLARE @SEARCH VARCHAR(255)
    SET @SEARCH = '<script>document.write</script>'
     
    DECLARE Table_Cursor CURSOR FOR 
    	SELECT a.name, b.name
    	FROM sysobjects a, syscolumns b 
    	WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) 
    OPEN Table_Cursor 
    	FETCH NEXT FROM Table_Cursor INTO @T,@C
    	WHILE(@@FETCH_STATUS=0) 
    	BEGIN
    		-- PRINT est à remplacer par EXEC une fois les tests réalisés
    		PRINT('UPDATE ['+@T+'] SET ['+@C+']= REPLACE(['+@C+'], ''' + @SEARCH + ''', '''')')
     
    	FETCH NEXT FROM Table_Cursor INTO @T,@C
    END
    CLOSE Table_Cursor
    DEALLOCATE Table_Cursor
    Bon courage.

    N'oublie pas les mesures de sécurité de base décrites ici: http://www.developpez.net/forums/d59...njections-sql/

    A+

    PS: ce code est très pratique pour obfusquer une base de données. Enfin, c'est pas vraiment une obfuscation... Je l'utilise quand je veux passer une copie d'une base de données à une SSII est ne pas communiquer d'informations confidentielle (clients, commandes, ...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    DECLARE @T VARCHAR(255),@C VARCHAR(255), @L VARCHAR(255)
     
    DECLARE Table_Cursor CURSOR FOR 
    	SELECT a.name, b.name, case when b.length > 200 then 200 else b.length end as [Length]
    	FROM sysobjects a, syscolumns b 
    	WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) 
    OPEN Table_Cursor 
    	FETCH NEXT FROM Table_Cursor INTO @T,@C,@L
    	WHILE(@@FETCH_STATUS=0) 
    	BEGIN
    		EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR('+@L+'), ''Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec molestie. Sed aliquam sem ut arcu. Phasellus sollicitudin. Vestibulum condimentum facilisis nulla.''))')
     
    	FETCH NEXT FROM Table_Cursor INTO @T,@C,@L
    END
    CLOSE Table_Cursor
    DEALLOCATE Table_Cursor
    Euh ne l'execute pas sur ta base celui là!! C'est juste pour info hein?!
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Merci infiniment, je vais tester tout cela et je suis en train de tout sécuriser au mieux selon vos conseils.

    J'ai aussi des injections de code commençant pas <SPAN
    Ce soucis ne concerne que les champ texte dans lesquels avaient été autorisé du code html

    Sinon, sauriez vous éventuellement pourquoi ma requette SQL ne fonctionne pas ? On ne peux utilisez instr ('instr' n'est pas un nom de fonction reconnu!)

    chaine = ma_chaine
    mot = mon_mot

    SQL = "UPDATE [matable] SET mon_champ = left(ma_chaine,instr(ma_chaine,mon_lien)) "

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    InStr() n'est pas supporté sur SQL Server.
    Est une balise html qui n'est pas nocive. Il ne faut peut-être pas l'enlever.

    Voici une page faisant la liste des fonctions en langage SQL: http://sqlpro.developpez.com/cours/sqlaz/fonctions/

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Merci pour toute l'aide

    Dernière petite chose sur ce sujet, je voulais faire une requette SQL sur mon_champ contenant du code html mais cla me retourne un mauvais résultat (du aux caractères html)

    exemple

    ... WHERE left(ma_table.mon_champ,20) = '...'

    comment empecher l'interpretation des caract speciaux contenu dans un champ pour une requette sql ?

  8. #8
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Si un caractère reservé t'empêche d'executer ta requête, il suffit de la faire précéder d'un caractère d'échapement que tu définis avec la fonction "ESCAPE".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE monchamp LIKE '%\%%' ESCAPE '\'
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. Recherche a partir d'un mot inséré dans un champ texte
    Par mickniclln dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/12/2012, 18h32
  2. Réponses: 8
    Dernier message: 11/08/2009, 09h07
  3. Comment générer un fichier texte à partir d'un XML et XSL
    Par Jayceblaster dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/07/2005, 22h42
  4. Réponses: 2
    Dernier message: 25/03/2005, 09h23
  5. affichage de tabulations en mode texte à partir de XSL
    Par closo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/02/2004, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo