Scripts malveillants. Registre. Neutraliser les scripts du serveur

La vérité est que le site peut être piraté tôt ou tard. Après avoir exploité avec succès la vulnérabilité, le pirate informatique tente de prendre pied sur le site en plaçant des shells Web et des téléchargeurs dans les répertoires système et en introduisant des portes dérobées dans le code de script et la base de données CMS.

Les scanners aident à détecter les shells Web chargés, les portes dérobées, les pages de phishing, les spams et autres types de scripts malveillants - tout ce qu'ils connaissent et sont pré-ajoutés à la base de données de signatures de codes malveillants. Certains scanners, tels que AI-BOLIT, disposent d'un ensemble de règles heuristiques capables de détecter les fichiers contenant du code suspect souvent utilisé dans des scripts malveillants, ou les fichiers dotés d'attributs suspects pouvant être téléchargés par des pirates. Mais malheureusement, même si plusieurs scanners sont utilisés sur l'hébergement, il peut y avoir des situations dans lesquelles certains scripts de pirates ne sont pas détectés, ce qui signifie en fait que l'attaquant se retrouve avec une « porte dérobée » et peut pirater le site et en prendre le contrôle total. à tout moment.

Les scripts modernes de logiciels malveillants et de pirates informatiques sont très différents de ceux d’il y a 4 à 5 ans. Actuellement, les développeurs de codes malveillants combinent obscurcissement, chiffrement, décomposition, chargement externe de code malveillant et autres astuces pour tromper les logiciels antivirus. Par conséquent, la probabilité de manquer de nouveaux logiciels malveillants est beaucoup plus élevée qu’auparavant.

Que peut-on faire dans ce cas pour détecter plus efficacement les virus sur le site et les scripts de hackers sur l'hébergement ? Il est nécessaire d'utiliser une approche intégrée : une première analyse automatisée et une analyse manuelle ultérieure. Cet article abordera les options de détection de code malveillant sans scanner.

Tout d’abord, regardons ce que vous devez exactement rechercher lors d’un hack.

  • Scripts de hackers.
    Le plus souvent, lors du piratage, les fichiers téléchargés sont des shells Web, des portes dérobées, des « uploaders », des scripts pour les courriers indésirables, des pages de phishing + des processeurs de formulaires, des portes et des fichiers de marqueurs de piratage (images du logo du groupe de hackers, fichiers texte avec « message » des pirates, etc.)
  • Injections (injections de code) dans des fichiers .
    Le deuxième type d’hébergement de code malveillant et de pirate informatique le plus populaire est l’injection. Les redirections mobiles et de recherche peuvent être injectées dans les fichiers .htaccess du site existant, les portes dérobées peuvent être injectées dans des scripts php/perl et des fragments javascript viraux ou des redirections vers des ressources tierces peuvent être intégrés dans des modèles .js et .html. Des injections sont également possibles dans des fichiers multimédias, par exemple.jpg ou. Souvent, le code malveillant se compose de plusieurs composants : le code malveillant lui-même est stocké dans l'en-tête exif du fichier jpg et est exécuté à l'aide d'un petit script de contrôle dont le code ne semble pas suspect au scanner.
  • Injections de bases de données.
    La base de données est la troisième cible d'un pirate informatique. Ici, des insertions statiques sont possibles, , , , qui redirigent les visiteurs vers des ressources tierces, les « espionnent » ou infectent l'ordinateur/l'appareil mobile du visiteur à la suite d'une attaque au volant.
    De plus, dans de nombreux CMS modernes (IPB, vBulletin, modx, etc.), les moteurs de modèles vous permettent d'exécuter du code PHP, et les modèles eux-mêmes sont stockés dans la base de données, de sorte que le code PHP des shells Web et des portes dérobées peut être construit directement. dans la base de données.
  • Injections dans les services de mise en cache.
    En raison d'une configuration incorrecte ou dangereuse des services de mise en cache, par exemple Memcached, des injections dans les données mises en cache « à la volée » sont possibles. Dans certains cas, un pirate informatique peut injecter du code malveillant dans les pages d'un site sans pirater directement le site.
  • Injections/éléments initiés dans les composants du système serveur.
    Si un pirate informatique a obtenu un accès privilégié (root) au serveur, il peut remplacer les éléments du serveur Web ou du serveur de mise en cache par des éléments infectés. Un tel serveur Web assurera, d’une part, le contrôle du serveur à l’aide de commandes de contrôle et, d’autre part, introduira de temps en temps des redirections dynamiques et du code malveillant dans les pages du site. Comme dans le cas d'une injection dans un service de mise en cache, l'administrateur du site ne pourra probablement pas détecter le fait que le site a été piraté, puisque tous les fichiers et la base de données seront originaux. Cette option est la plus difficile à traiter.
  • Supposons donc que vous ayez déjà vérifié les fichiers sur l'hébergement et le dump de la base de données avec des scanners, mais qu'ils n'aient rien trouvé et que le virus soit toujours sur la page ou que la redirection mobile continue de fonctionner lors de l'ouverture des pages. Comment chercher plus loin ?

    Recherche manuelle

    Sous Unix, il est difficile de trouver une paire de commandes plus utile pour rechercher des fichiers et des fragments que find/grep.

    trouver . -name '*.ph*' -mtime -7

    trouvera tous les fichiers qui ont été modifiés au cours de la semaine dernière. Parfois, les pirates « tordent » la date de modification des scripts afin de ne pas détecter de nouveaux scripts. Ensuite vous pouvez rechercher des fichiers php/phtml dont les attributs ont changé

    trouver . -name '*.ph*' -сtime -7

    Si vous avez besoin de rechercher des modifications dans un certain intervalle de temps, vous pouvez utiliser la même recherche

    trouver . -name '*.ph*' -newermt 2015-01-25 ! -newermt 2015-01-30 -ls

    Pour rechercher des fichiers, grep est indispensable. Il peut rechercher de manière récursive dans les fichiers un fragment spécifié

    grep -ril 'stummann.net/steffen/google-analytics/jquery-1.6.5.min.js' *

    Lors du piratage d'un serveur, il est utile d'analyser les fichiers dont l'indicateur guid/suid est défini

    trouver / -perm -4000 -o -perm -2000

    Pour déterminer quels scripts sont en cours d'exécution et chargent le processeur d'hébergement, vous pouvez appeler

    lsof +r 1 -p `ps axww | grep httpd | grep -v grep | awk ‘ ( if(!str) ( str= ) else ( str=str””))END(print str)’` | grep vhosts | grep php

    Nous utilisons notre cerveau et nos mains pour analyser les fichiers sur l'hébergement
  • Nous allons dans les répertoires de téléchargement, de cache, tmp, de sauvegarde, de journal, d'images, dans lesquels quelque chose est écrit par des scripts ou téléchargés par les utilisateurs, et analysons le contenu à la recherche de nouveaux fichiers avec des extensions suspectes. Par exemple, pour Joomla, vous pouvez vérifier les fichiers .php dans le répertoire images:find ./images -name '*.ph*'. Très probablement, si quelque chose est trouvé, ce sera un malware.
    Pour WordPress, il est logique de vérifier les scripts dans le répertoire wp-content/uploads, les répertoires de thème de sauvegarde et de cache.
  • Recherche de fichiers avec des noms étranges
    Par exemple, php, pour info.php, n2fd2.php. Les fichiers peuvent être recherchés
    • - par des combinaisons de caractères non standards,
    • - la présence des chiffres 3,4,5,6,7,8,9 dans le nom du fichier
  • Nous recherchons des fichiers avec des extensions inhabituelles
    Disons que vous avez un site Web sur WordPress ou que pour eux, les fichiers avec les extensions .py, .pl, .cgi, .so, .c, .phtml, .php3 ne seront pas tout à fait ordinaires. Si des scripts et des fichiers portant ces extensions sont détectés, il s’agira très probablement d’outils de piratage. Le pourcentage de fausses détections est possible, mais il n'est pas élevé.
  • Nous recherchons des fichiers avec des attributs ou une date de création non standard
    La suspicion peut être provoquée par des fichiers dont les attributs diffèrent de ceux existants sur le serveur. Par exemple, tous les scripts .php ont été téléchargés via ftp/sftp et ont l'utilisateur user, et certains ont été créés par l'utilisateur www-data. Il est logique de vérifier les dernières. Ou si la date de création du fichier script est antérieure à la date de création du site.
    Pour accélérer la recherche de fichiers avec des attributs suspects, il est pratique d'utiliser la commande Unix find.
  • Nous recherchons des portes utilisant un grand nombre de fichiers .html ou .php
    S'il y a plusieurs milliers de fichiers .php ou .html dans le répertoire, il s'agit probablement d'une porte.
  • Journaux pour aider

    Le serveur Web, le service de messagerie et les journaux FTP peuvent être utilisés pour détecter les scripts malveillants et pirates.

    • La corrélation de la date et de l'heure d'envoi d'une lettre (qui peuvent être trouvées dans le journal du serveur de messagerie ou dans l'en-tête de service d'une lettre de spam) avec les requêtes du access_log permet d'identifier la méthode d'envoi du spam ou de trouver le script de l'expéditeur du spam.
    • L'analyse du journal de transfert FTP xferlog permet de comprendre quels fichiers ont été téléchargés au moment du hack, lesquels ont été modifiés et par qui.
    • Dans un journal de serveur de messagerie correctement configuré ou dans l'en-tête de service d'un courrier indésirable, si PHP est correctement configuré, il y aura un nom ou un chemin complet vers le script d'envoi, ce qui permet de déterminer la source du spam.
    • À l'aide des journaux de protection proactive des CMS et plugins modernes, vous pouvez déterminer quelles attaques ont été menées sur le site et si le CMS a pu y résister.
    • En utilisant access_log et error_log, vous pouvez analyser les actions d'un pirate informatique si vous connaissez les noms des scripts qu'il a appelés, l'adresse IP ou l'agent utilisateur. En dernier recours, vous pouvez consulter les requêtes POST le jour où le site a été piraté et infecté. Souvent, l'analyse permet de trouver d'autres scripts de hackers qui ont été téléchargés ou qui se trouvaient déjà sur le serveur au moment du piratage.
    Contrôle d'intégrité

    Il est beaucoup plus facile d'analyser un piratage et de rechercher des scripts malveillants sur un site Web si vous veillez à sa sécurité à l'avance. La procédure de contrôle d'intégrité permet de détecter en temps opportun les modifications apportées à l'hébergement et de déterminer le fait de piratage. L’un des moyens les plus simples et les plus efficaces consiste à placer le site sous un système de contrôle de version (git, svn, cvs). Si vous configurez correctement .gitignore, le processus de contrôle des modifications ressemble à un appel à la commande git status, et la recherche de scripts malveillants et de fichiers modifiés ressemble à git diff.

    De plus, vous disposerez toujours d'une copie de sauvegarde de vos fichiers, sur laquelle vous pourrez « restaurer » le site en quelques secondes. Les administrateurs de serveur et les webmasters avancés peuvent utiliser inotify, tripwire, auditd et d'autres mécanismes pour suivre l'accès aux fichiers et répertoires et surveiller les modifications dans le système de fichiers.

    Malheureusement, il n'est pas toujours possible de configurer un système de contrôle de version ou des services tiers sur le serveur. Dans le cas d'un hébergement mutualisé, il ne sera pas possible d'installer un système de contrôle de version et des services système. Mais ce n’est pas grave, il existe de nombreuses solutions toutes faites pour les CMS. Vous pouvez installer un plugin ou un script distinct sur le site qui suivra les modifications apportées aux fichiers. Certains CMS mettent déjà en œuvre une surveillance efficace des modifications et un mécanisme de contrôle d'intégrité (par exemple, Bitrix, DLE). En dernier recours, si l'hébergement dispose de ssh, vous pouvez créer un instantané de référence du système de fichiers avec la commande

    Promotion « 2 pour le prix de 1 »

    La promotion est valable jusqu'à la fin du mois.

    Lorsque vous activez le service « Site sous surveillance » pour un site Internet, le deuxième sur le même compte est connecté gratuitement. Sites suivants sur le compte - 1 500 roubles par mois pour chaque site.

    1. Décompressez-le dans le dossier du site.
    2. suivez le lien votre_site/fscure/
    3. tout

    Que peut-il faire?

    1. Recherche automatique de virus par signatures.
    2. Rechercher une chaîne dans les fichiers
    3. Suppression de fichiers
    4. Corrigez le code malveillant à l'aide d'expressions régulières

    Le script ne fera pas tout le travail à votre place et nécessite quelques connaissances minimales. Il est recommandé de faire une sauvegarde du site avant les travaux.

    Comment ça marche?

    Lors du premier lancement, il crée un index de fichiers. Le fichier fscure.lst se trouve dans le dossier. Affiche une liste de fichiers contenant des signatures potentiellement malveillantes. « Potentiellement malveillant » signifie que vous devrez décider s'il s'agit d'un virus ou non. La liste des signatures est configurée dans le fichier config.php, constante SCAN_SIGN. Avec les paramètres par défaut, le script ne vérifie pas les fichiers js et ne contient pas de signatures pour ceux-ci.

    Problèmes les plus courants

    1. ne crée pas l'index fscure.lst. Cela peut arriver s’il n’y a pas suffisamment de droits. Mettez 777 dans le dossier fscure

    2. Erreur 5xx. Le plus souvent "504 Gateway Time-out". Le script n'a pas le temps d'être traité et plante en raison d'un délai d'attente. Dans ce cas, il existe plusieurs façons d'accélérer son travail. La vitesse dépend principalement de la taille de l'index. C'est dans le fichier fscure.lst. Généralement, un fichier jusqu'à 5 Mo peut être traité dans 90 % des cas. S'il n'a pas le temps, vous pouvez réduire la « cupidité » du script en interdisant de scanner *.jpg;*.png;*.css dans la configuration.
    Dans le fichier config.php.

    // délimiteur ; définir("FILES_EXCLUDE","*.js;*.jpg;*.png;*.css");

    3. L'hébergement émet un avertissement comme
    (HEX)base64.inject.unclassed.6 : u56565656 : /var/www/u65656565/data/www/34535335353.ru/fscure/index.php

    Il n’y a aucun virus dans le script et il n’y en a jamais eu. Et (HEX)base64.inject.unclassed.6 est une construction comme "echo base64_decode(" , qui est souvent rencontrée et en soi est assez inoffensive. Cependant, dans la dernière version, j'ai remplacé ce code.

    Que faire si vous ne parvenez pas à trouver le virus vous-même ?

    Vous pouvez me contacter pour obtenir de l'aide. Mes tarifs sont modestes. Je garantis mon travail pendant 6 mois. Le coût des travaux est de 800 roubles. pour 1 emplacement. S'il y a plusieurs sites sur votre compte, le prix est déterminé individuellement.

    Si vous parvenez à tout faire vous-même, je vous serais reconnaissant d'obtenir une récompense financière ou un lien vers mon site.

    Mes prérequis :
    Yandex
    41001151597934

    argent Web
    Z959263622242
    R356304765617
    E172301357329

    WordPress est l'un des systèmes de gestion de contenu les plus populaires, utilisé à diverses fins, des blogs au commerce électronique. Il existe une large sélection de plugins et de thèmes WordPress. Il arrive que certaines de ces extensions tombent entre les mains des webmasters après qu'un attaquant ait travaillé dessus.

    Pour son propre bénéfice, il pourra y laisser des liens publicitaires ou du code avec lesquels il gérera votre site. De nombreux utilisateurs de WordPress n’ont pas beaucoup d’expérience en programmation Web et ne savent pas comment gérer cette situation.

    Pour eux, j'ai passé en revue neuf des outils les plus efficaces pour détecter les modifications malveillantes dans le code d'un site Web en cours d'exécution ou de modules complémentaires installés.

    1. Vérificateur d'authenticité du thème (TAC)

    Theme Authenticity Checker (TAC) est un plugin WordPress qui analyse chaque thème installé à la recherche d'éléments suspects comme des liens invisibles ou du code crypté Base64.

    Ayant détecté de tels éléments, TAC les signale à l'administrateur WordPress, lui permettant d'analyser en toute autonomie et, si nécessaire, de corriger les fichiers du thème source :

    2. Exploiter le scanner

    Exploit Scanner analyse l'intégralité du code source de votre site et le contenu de la base de données WordPress à la recherche d'inclusions douteuses. Tout comme TAC, ce plugin n’empêche pas les attaques ni ne combat automatiquement leurs conséquences.

    Il montre uniquement les symptômes d’infection détectés à l’administrateur du site. Si vous souhaitez supprimer le code malveillant, vous devrez le faire manuellement :

    3. Sécurité Sucuri

    Sucuri est une solution de sécurité WordPress bien connue. Le plugin Sucuri Security surveille les fichiers téléchargés sur un site WordPress, maintient sa propre liste de menaces connues et vous permet également d'analyser le site à distance à l'aide du scanner gratuit Sucuri SiteCheck. Moyennant des frais d'abonnement, vous pouvez renforcer encore la protection de votre site en installant un puissant pare-feu Sucuri Website Firewall :

    4. Anti-programme malveillant

    Anti-Malware est un plugin pour WordPress qui peut rechercher et supprimer les scripts de chevaux de Troie, les portes dérobées et autres codes malveillants.

    Les paramètres d'analyse et de suppression peuvent être personnalisés. Ce plugin peut être utilisé après inscription gratuite sur gotmls.

    Le plugin accède régulièrement au site Web du fabricant, transmettant des statistiques de détection de logiciels malveillants et recevant des mises à jour. Par conséquent, si vous ne souhaitez pas installer sur votre site de plugins qui surveillent son fonctionnement, alors vous devez éviter d'utiliser Anti-Malware :

    5. Protection des sites antivirus WP

    WP Antivirus Site Protection est un plugin qui analyse tous les fichiers téléchargés sur un site, y compris les thèmes WordPress.

    Le plugin possède sa propre base de données de signatures, qui est automatiquement mise à jour via Internet. Il peut supprimer automatiquement les menaces, avertir l'administrateur du site par e-mail et bien plus encore.

    Le plugin est installé et fonctionne gratuitement, mais il comporte plusieurs modules complémentaires payants qui méritent une attention particulière :

    6. Antivirus pour WordPress

    AntiVirus pour WordPress est un plugin facile à utiliser qui peut analyser régulièrement votre site et vous informer des problèmes de sécurité par e-mail. Le plugin dispose d'une liste blanche personnalisable et d'autres fonctionnalités :

    7. Scanner de logiciels malveillants Web Quterra

    Le scanner de Quterra vérifie un site Web pour les vulnérabilités, les injections de code tiers, les virus, les portes dérobées, etc. Le scanner possède des fonctionnalités aussi intéressantes que l'analyse heuristique et la détection de liens externes.

    Les fonctionnalités de base du scanner sont gratuites, tandis que certains services supplémentaires vous coûteront 60 $ par an :

    8. Clôture de mots

    Si vous recherchez une solution complète aux problèmes de sécurité de votre site Web, ne cherchez pas plus loin que Wordfence.

    Ce plugin offre une protection constante à WordPress contre les types d'attaques connus, une authentification à deux facteurs, la prise en charge d'une « liste noire » d'adresses IP d'ordinateurs et de réseaux utilisés par les pirates et les spammeurs, et l'analyse du site à la recherche de portes dérobées connues.

    Ce plugin est gratuit dans sa version de base, mais il dispose également de fonctionnalités premium, pour lesquelles le constructeur demande un modeste abonnement :

    9.Wemahu

    Wemahu surveille les modifications apportées au code de votre site et recherche les codes malveillants.

    La base de données sur laquelle les logiciels malveillants sont détectés est reconstituée selon la méthode du crowdsourcing : les utilisateurs eux-mêmes la reconstituent en envoyant les résultats de l'analyse des installations WordPress infectées au site Web de l'auteur du plugin. Le plugin prend également en charge l'envoi de rapports par e-mail et d'autres fonctionnalités utiles.

    JavaScript malveillant

    Mon opinion, selon laquelle il est plus facile et plus efficace de se protéger contre les scripts de navigateur malveillants injectés (attaques XSS stockées) à l'aide d'outils de navigateur, a été exprimée précédemment : . La protection du navigateur contre JavaScript, qui consiste à ajouter du code de filtrage aux pages HTML du site Web, est vraisemblablement fiable ; cependant, la présence d'une telle protection n'élimine pas la nécessité d'utiliser également un filtre de serveur. Pour les mêmes attaques XSS, vous pouvez organiser une ligne de défense supplémentaire sur le serveur. Nous devons également garder à l'esprit la possibilité qu'un attaquant introduise non pas des scripts basés sur le navigateur, mais côté serveur (php) dans un message HTML envoyé depuis un site, que le navigateur ne pourra pas reconnaître.

    Un script d'attaque, qu'il soit basé sur un navigateur ou sur un serveur, est un programme ; il faut penser que le programme aura toujours quelques différences symboliques par rapport au HTML « pur ». Essayons de trouver de telles différences et utilisons-les pour créer un filtre HTML sur le serveur. Vous trouverez ci-dessous des exemples de JavaScript malveillant.

    XSS :

    Du texte


    Du texte

    XSS crypté :

    Du texte


    Du texte

    Les navigateurs récupèrent le texte des primitives de caractères non seulement situées à l'intérieur des conteneurs HTML (entre les balises d'ouverture et de fermeture), mais également à l'intérieur des balises elles-mêmes (entre< и >). Le codage URL est autorisé dans les adresses http. Cela rend difficile la reconnaissance du code malveillant côté serveur, car la même séquence de caractères peut être représentée de différentes manières.

    Vers XSS :

    "+innerHTML.slice(action= (method="post")+".php",155)))">





    alert("xss");with(new XMLHttpRequest)open("POST","post.php"),send("content="+_.outerHTML)

    Les vers XSS ci-dessus ne sont que quelques-uns des nombreux vers soumis au concours de Robert Hansen (alias RSnake) de janvier 2008 pour le ver JavaScript malveillant le plus court (résultats du concours).

    Signes d'attaques XSS

    Un script XSS est un programme qui accède aux objets DOM (Document Object Model) et à leurs méthodes. Sinon, il est peu probable qu’il soit nocif. Par exemple, chaîne JavaScript
    onckick="var a = "xss""
    n'affecte pas le modèle objet du document, donc même si elle est intégrée dans une balise HTML, une telle chaîne est inoffensive. Ce n'est qu'en manipulant les objets d'un document HTML et leurs méthodes qu'un pirate informatique peut causer des dommages importants à un site. Par exemple, la ligne
    onmousemove="document.getElementsByTagName("body").innerHTML="XSS""
    remplace déjà le contenu de la page.

    Le signe d'accès aux méthodes DOM est constitué de parenthèses, ainsi que de points à gauche du signe égal. Les parenthèses peuvent également être utilisées en HTML pour définir une couleur au format rgb(). Cependant, les couleurs de police et d'arrière-plan en HTML sont définies d'au moins trois autres manières. Par conséquent, les parenthèses peuvent être sacrifiées sans compromettre l’expressivité du texte HTML. Il faut accepter en règle générale que les parenthèses soient à l'intérieur de la balise (c'est-à-dire entre< и >) - c'est très dangereux, si nous recevons un message d'un utilisateur sur le serveur, ce message contient des crochets à l'intérieur des balises, alors la chose la plus appropriée que nous devrions faire est de bloquer un tel message.

    Le point peut être contenu dans des balises html : lors de la spécification de l'adresse du lien (balise ); lors de la définition de la taille des éléments HTML (style="height:1.5in; width:2.5in;" ). Mais les séquences de caractères de la forme
    le point de la lettre est égal à
    ne peut pas être dans les balises html. Si la séquence spécifiée est présente dans une balise HTML, le message de l'utilisateur contient très probablement un script et doit être bloqué.

    Un autre signe de danger évident est le symbole "+" à l'intérieur de l'étiquette. Il n’existe rien de tel dans le HTML sans script. Si nous trouvons des avantages à l'intérieur des balises, nous bloquons impitoyablement le message.

    Un utilisateur bien intentionné du site qui ajoute un commentaire à l'aide d'un éditeur visuel n'aura jamais recours au cryptage avec des primitives symboliques à l'intérieur des balises html. L'utilisation de primitives symboliques dans les balises n'apporte aucun avantage sous forme de moyens d'expression supplémentaires, elle nécessite seulement un temps d'écriture supplémentaire. Dans la plupart des cas, on pourrait penser qu’un utilisateur bien intentionné ne sait même pas qu’il existe certaines primitives de caractères en HTML. D'où la règle : une esperluette à l'intérieur d'un tag est la preuve d'une attaque sur le site. Par conséquent, si nous voyons cela, nous bloquons le message.

    Une règle similaire devrait être adoptée concernant le symbole "%", qui peut être utilisé dans l'encodage des URL. Cependant, les pourcentages sont également utilisés en HTML « pur » pour définir les tailles relatives des éléments. Les combinaisons dangereuses sont celles dans lesquelles le signe « % » est immédiatement suivi d'une lettre ou d'un chiffre.

    Neutraliser les scripts du serveur

    Contrairement aux interpréteurs JavaScript des navigateurs, l'interpréteur PHP sur le serveur n'autorise aucune liberté lors de l'écriture du texte du programme. Ainsi, pour neutraliser un éventuel script serveur, il suffit de remplacer intégralement dans le message HTML de l’utilisateur tous les caractères indispensables à l’écriture d’un programme PHP par leurs primitives HTML. Ceux qui doivent être remplacés sont tout d'abord le dollar et le trait de soulignement, le point, les parenthèses, les accolades, les signes plus et moins et la barre oblique inverse.

    Filtre PHP pour les messages HTML

    $message est le message HTML reçu de l'éditeur visuel vers le serveur.

    // mémorise la longueur du message $lenmessage = strlen($message); // découpe la balise de commentaire $message = preg_replace("//", "", $message); // supprime chaque balise dans laquelle l'attribut "src" fait référence à une ressource externe $message = preg_replace("/]+?src[\w\W]+\/\/[^>]+?>/i" , " ", $message); // supprime chaque balise contenant un caractère sauf : - a-z 0-9 / . : ; " = % # espace $message = preg_replace("/]+[^->a-z0-9\/\.\:\;\"\=\%\#\s]+[^>]+?> /i", "", $message); // supprime chaque balise contenant la séquence ". a-z =" $message = preg_replace("/]+?\.+?\=[^>]+?>/i", "", $message); // découpe chaque balise contenant la séquence "% a-z" ou "% 0-9" $message = preg_replace("/]+?\%+?[^>]+?>/i", "", $ message); // découpe chaque balise contenant la séquence "script" ou "js:" $message = preg_replace("/]*?script[^>]*?>/i", "", $message); $message = preg_replace("/]*?js:[^>]*?>/i", "", $message); // supprime chaque balise commençant par un caractère autre que "a-z" ou "/" $message = preg_replace("/]*?>/i", "", $message); // vérifie : si le message est raccourci, alors termine le programme $lenmessage2 = strlen($message); if ($lenmessage != $lenmessage2) ( print "Le message ne peut pas être ajouté"; exit; ) // effectue le remplacement de bout en bout des caractères dangereux par leurs primitives correspondantes $message = str_replace("$", "$" , $message); $message = str_replace("_", "_", $message); $message = str_replace(".", ".", $message); $message = str_replace(chr(92), "\", $message); // \ $message = str_replace("(", "(", $message); $message = str_replace()", ")", $message); $message = str_replace("[", "[", $message); $message = str_replace("]", "]", $message); $message = str_replace("(", "(", $message); $message = str_replace()", ")", $message); $message = str_replace("?", "?", $message); // maintenant le message a été vérifié, les scripts qu'il contient ont été neutralisés

    Il convient de noter que le filtre ne supprime pas les balises appariées. Disons que nous avons
    Cliquez ici!
    Le filtre supprimera uniquement le , mais la balise appariée (de fermeture) restera. Si vous envoyez au navigateur des messages contenant des balises sans paires correspondantes, vous risquez de rencontrer des problèmes sous la forme d'une « biaise » du site. On ne sait pas à quelle balise d'ouverture le navigateur fera correspondre la balise de fermeture non appariée restante. Par conséquent, et également pour des raisons de sécurité, les messages dans lesquels quelque chose a été supprimé par le filtre ne doivent pas du tout être envoyés au navigateur. Il est préférable d'imprimer quelque chose comme "Le message n'a pas pu être ajouté" et de quitter le programme.

    Le message est censé être écrit dans un fichier (et non dans une base de données).

    Discussion

    Je serai reconnaissant pour les critiques. Écrivez au forum d'assistance, dans la section