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

Linux Discussion :

Effacer une chaine dans plusieurs fichiers, récursivement


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Effacer une chaine dans plusieurs fichiers, récursivement
    Bonjour à tous,

    un de mes sites web a subit une attaque ces derniers jours, le bot en question a écrit à la fin de tous les fichiers php et html du site une chaine de caractère permettant l'intégration d'un iframe.

    Je suis donc à la recherche d'une commande linux me permettant de trouver tous les fichiers du site "contaminés" (ça j'y arrive avec mes faibles notions de grep) et d'effacer dans tous ces fichiers la chaine de caractère en question (en une seule fois, sans confirmation).

    Est ce que je cherche à faire est possible avec une commande linux, et si oui pourriez vous m'aider à l'écrire ?

    Ma commande actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgrep -rnl "ma_chaine" *
    me permet de trouver les fichiers "infectés".

    Là où je bloque c'est pour effacer la ligne contenant "ma_chaine" de ces fichiers

    J'ai lu ici que je devais probablement utiliser l'option -v (pour ne pas afficher les lignes à supprimer) mais je n'ai pas trouvé comment le faire directement sur tous mes fichiers et sans passer par des fichiers temporaires (ou alors si on passe par des temporaires, faire en sorte qu'ils remplacement directement les originaux)

    Merci infiniment pour votre aide précieuse.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    Citation Envoyé par snowkhan
    Bonjour à tous,

    un de mes sites web a subit une attaque ces derniers jours, le bot en question a écrit à la fin de tous les fichiers php et html du site une chaine de caractère permettant l'intégration d'un iframe.

    Je suis donc à la recherche d'une commande linux me permettant de trouver tous les fichiers du site "contaminés" (ça j'y arrive avec mes faibles notions de grep) et d'effacer dans tous ces fichiers la chaine de caractère en question (en une seule fois, sans confirmation).

    Est ce que je cherche à faire est possible avec une commande linux, et si oui pourriez vous m'aider à l'écrire ?

    Ma commande actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgrep -rnl "ma_chaine" *
    me permet de trouver les fichiers "infectés".

    Là où je bloque c'est pour effacer la ligne contenant "ma_chaine" de ces fichiers

    J'ai lu ici que je devais probablement utiliser l'option -v (pour ne pas afficher les lignes à supprimer) mais je n'ai pas trouvé comment le faire directement sur tous mes fichiers et sans passer par des fichiers temporaires (ou alors si on passe par des temporaires, faire en sorte qu'ils remplacement directement les originaux)

    Merci infiniment pour votre aide précieuse.
    utilisez find pour trouver les fichiers récursivement et sed pour supprimer le texte incluant le frame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    find path_to_site_directory -name *.html -exec  correct.sh {} \;
    find path_to_site_directory -name *.php -exec  correct.sh {} \;
    dans correct.sh (chmod 755 correct.sh)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/sh
    # param = path to file to correct
     
    mv "$1" "$1.old"
    sed 's/pattern_of_included_frame//g' "$1.old" > "$1"
    rm "$1.old" > /dev/null
    ou si le pattern_of_included_frame est sur une ligne seule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed '/pattern_of_included_frame/d' "$1.old" > "$1"
    (bien sûr sed ne fonctionne correctement que si les fins de lignes sont de type Unix : (0x0A, \n) - attention si ce n'est pas la cas d'ajouter une conversion avant :
    mv "$1" "$1.old"
    cat "$1.old" | tr '\r' '\n' | sed 'substitution_expression' | tr '\n' '\r' > "$1"
    )

    et bien sûr TESTEZ votre script sur un backup ou quelques fichiers tests…
    (ou mettez en commentaire la ligne rm "$1.old" pour la phase de tests…)
    vous pourrez effacez les .old dans le même esprit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    find path_to_site_directory -name *.html.old -exec rm {} \;
    find path_to_site_directory -name *.php.old -exec rm {} \;
    (si vous avez déjà utilisez .old comme suffixe pour d'autres tâches : mieux vaut en utiliser un autre pour celle-ci…)

    PS
    tout le code ayant été tapé dans le post, les précautions d'usage s'appliquent…

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aide très détaillée, avec tout ça je vais me débrouiller

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/05/2011, 14h10
  2. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  3. Réponses: 15
    Dernier message: 26/03/2006, 12h10
  4. Comment rechercher une chaine dans plusieurs tables ?
    Par tsing dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/11/2005, 18h04
  5. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43

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