Dino Geek essaye de t'aider

Qu'est-ce que XSS (Cross-Site Scripting) et comment le prévenir en PHP ?


Le XSS (Cross-Site Scripting) est une vulnérabilité de sécurité des applications web qui permet à un attaquant d’injecter des scripts malveillants dans les pages web consultées par d’autres utilisateurs. Ces scripts peuvent être utilisés pour voler des informations sensibles comme des cookies de session, manipuler le contenu de la page, ou rediriger l’utilisateur vers des sites malveillants. Il existe principalement trois types de XSS : le XSS non persistant (reflected XSS), le XSS persistant (stored XSS), et le XSS basé sur le DOM.

1. Reflected XSS : Ce type de XSS se produit lorsque les données injectées par un attaquant sont renvoyées immédiatement par l’application. Cela se produit souvent via des paramètres de requête dans une URL ou un formulaire soumis. Exemple : \`\`\`php \`\`\` Si l’utilisateur saisit un script malveillant dans le paramètre `name`, ce script sera exécuté.

1. Stored XSS : Ce type de XSS se produit lorsque les données injectées sont stockées sur le serveur et affichées à plusieurs reprises aux utilisateurs, par exemple dans des forums ou des sections de commentaires. Exemple : \`\`\`php // Imaginons une insertion de commentaire dans une base de données $comment = $\_POST[‘comment’]; $query = “INSERT INTO comments (comment) VALUES (‘$comment’)”; mysqli\_query($conn, $query);

// Affichage de commentaires $result = mysqli\_query($conn, “SELECT comment FROM comments”); while ($row = mysqli_fetch_assoc($result)) { echo $row[‘comment’]; } \`\`\` Si un attaquant injecte du code JavaScript malveillant dans le commentaire, celui-ci sera exécuté chaque fois que le commentaire sera affiché.

1. DOM XSS : Ce type de XSS modifie le DOM du document via le JavaScript côté client et n’implique pas de communication serveur. Exemple : \`\`\`html \`\`\` Un attaquant pourrait manipuler le `document.location.hash` pour injecter un script malveillant dans la page.

Comment prévenir le XSS en PHP :

1. Échapper et assainir les entrées utilisateurs : Utilisez des fonctions intégrées pour échapper les caractères spéciaux et empêcher l’exécution de scripts malveillants. \`\`\`php $safe_name = htmlspecialchars($name, ENT_QUOTES, ‘UTF-8’); echo “Hello, “ . $safe\_name; \`\`\`

1. Utiliser des en-têtes de sécurité : Les en-têtes HTTP comme `Content-Security-Policy` (CSP) peuvent aider à réduire le risque de XSS en spécifiant quelles sources de contenu sont autorisées. \`\`\`php header(“Content-Security-Policy: default-src ‘self’; script-src ‘self’;”); \`\`\`

1. Valider les entrées côté serveur : Ne jamais faire confiance aux données venant du client et toujours valider et assainir les entrées avant de les utiliser ou de les stocker.

1. Utiliser des bibliothèques tierces : Il existe des bibliothèques dédiées à la prévention des XSS, comme `HTMLPurifier`, qui nettoie et filtre les entrées HTML.

\`\`\`php require ‘HTMLPurifier.auto.php’; $purifier = new HTMLPurifier(); $clean_html = $purifier->purify($dirty_html); \`\`\`

1. Utiliser des tokens CSRF : Les attaques par XSS peuvent être combinées avec des attaques CSRF (Cross-Site Request Forgery). L’utilisation de tokens CSRF peut offrir une couche de protection supplémentaire.

En suivant ces bonnes pratiques et en utilisant les outils adéquats, il est possible de réduire significativement les risques associés au XSS et de protéger les utilisateurs et les données de l’application.

Sources :
- OWASP. “Cross-Site Scripting (XSS).” OWASP Foundation. [OWASP XSS](https://owasp.org/www-community/attacks/xss/)
- PHP Documentation. “htmlspecialchars.” PHP.net. [PHP htmlspecialchars](https://www.php.net/manual/fr/function.htmlspecialchars.php)
- MDN Web Docs. “Content Security Policy (CSP).” Mozilla. [MDN CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)
- HTMLPurifier. “HTMLPurifier.” HTMLPurifier.org. [HTMLPurifier](https://htmlpurifier.org/)


Générez simplement des articles pour optimiser votre SEO
Générez simplement des articles pour optimiser votre SEO





DinoGeek propose des articles simples sur des technologies complexes

Vous souhaitez être cité dans cet article ? Rien de plus simple, contactez-nous à dino@eiki.fr

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Nom de Domaine | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Mentions Légales / Conditions Générales d'Utilisation