Script intersite ( XSS )
Bonjour,
Merci d'avoir pris le temps de lire l'écriture - up! Je vous en suis reconnaissant!
Le contenu d'aujourd'hui portera sur la compréhension du 'Cross-Site Scripting ( XSS )'
Le contenu est entièrement basé sur mes expériences et connaissances personnelles, mes interactions avec des personnes incroyables dans l'espace App Sec et Software Development, et beaucoup de lecture et de codage sécurisé.
Dans cet article, je vais essayer de simplifier le contenu dans les bases. Je suis sûr que les lecteurs auront leurs propres pensées et commentaires, et je suis ouvert à tout commentaire et discussion.
Les vues / commentaires / opinions sont les miennes et non celles de mon employeur passé / actuel.
Apprenons ensemble !
Qu'est-ce que XSS ?
En termes simples, XSS est un type de vulnérabilité de sécurité d'application qui permet à un attaquant d'injecter du code malveillant dans une page Web.
Ce code malveillant s'exécute dans le contexte du navigateur de la victime, permettant à l'attaquant de voler la session de la victime et lui donnant également la possibilité de voler des données.
Différents types de XSS :
XSS stocké (persistant) : dans le XSS stocké, les scripts malveillants sont enregistrés de manière permanente sur un serveur. Cela signifie que le pirate malveillant doit trouver une vulnérabilité dans le site Web qui permet d'injecter un script malveillant. Lorsque la victime interroge les informations stockées, le script malveillant injecté par le pirate est récupéré sur le serveur et exécuté dans le navigateur de la victime.
XSS réfléchi : dans le XSS réfléchi, un attaquant insère un code/script malveillant dans un site Web, qui est renvoyé au navigateur de la victime. Cela signifie qu'une réponse HTTP malveillante contient exactement les mêmes données (non validées ni encodées) qu'une application a reçues dans une requête HTTP.
Dom ( Client — Side ) XSS : Dans DOM XSS, un attaquant insère un code/script malveillant pour altérer le DOM d'une page web du navigateur de la victime.
Comment réparer XSS :
Désormais, chaque paramètre et variable d'une page Web doit être sécurisé.
Une compréhension - chaque paramètre doit passer par la validation d'entrée et l'encodage de sortie (santizing) (selon le contexte des données).
Je vais énumérer différentes étapes sur la façon d'effectuer la validation / l'encodage de sortie :
Point net
Encodeur AntXss —https://learn.microsoft.com/en-us/dotnet/api/system.web.security.antixss.antixssencoder?view=netframework-4.8
Espace de noms : System.Web.Security.AntiXss
Assembly:System.Web.dll
Classe : AntiXSSEncoder
using System.Web.Security.AntiXss;
....
string inputStr = "<script>alert('a test xss attack script');</script>";
string encodedInput = AntiXssEncoder.HtmlEncode(inputStr, false);
....
Certaines autres méthodes importantes dans AntiXssEncoder() lorsqu'il s'agit d'encoder selon le contexte de la valeur, je n'entrerai pas beaucoup dans leurs détails, mais j'en énumérerai quelques-unes ici -
CssEncode() — Encode la chaîne spécifiée à utiliser dans les feuilles de style en cascade (CSS)
using System.Web.Security.AntiXss;
...
string inputCss = "inside a css attribute value: url('" + "https://example.com?param=" + "value" + "')";
string encodedInput = AntiXssEncoder.CssEncode(inputCss);
...
...
using System.Web.Security.AntiXss;
string input = "Inside an HTML attribute: href=\"" + "https://example.com?param=" + "value" + "\"";
string encodedInput = AntiXssEncoder.HtmlAttributeEncode(input);
...
Utiliser l'encodeur d'ESAPI ()
Lien :https://www.javadoc.io/doc/org.owasp.esapi/esapi/latest/org/owasp/esapi/Encoder.html
import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;
...
String input = "<script>alert('XSS');</script>";
Encoder encoder = ESAPI.encoder();
String encodedInput = encoder.encodeForHTML(input);
...
encodeForHTMLAttribute() — Encode les données à utiliser dans les attributs HTML.
encodeForJavaScript() — Encode les données à insérer dans une valeur de données ou un argument de fonction en JavaScript
encodeForXMLAttribute() — Encode les données à utiliser dans un attribut XML
Encodage de sortie en Javascript
N'utilisez jamais innerHTML. innerHTML est une propriété de DOM et est utilisée pour définir ou récupérer le contenu HTML d'un élément. innerHTML est dangereux car il restitue le contenu en html pur lui-même et non en texte.
Au lieu de innerHTML, utilisez textContent()
<!DOCTYPE html>
<html>
<head>
<title>textContentExample</title>
</head>
<body>
<div id="exampleTextContent"></div>
<script>
// Assume this user input comes from an untrusted source, like a form
const userInput = '<script>alert("XSS attack!");</script>'
const div = document.querySelector("exampleTextContent");
div.textContent = userInput;
</script>
</body>
</html>
JSTL ( *.jsp) : dans JSTL, vous pouvez utiliser la balise <c:out> pour échapper la sortie et empêcher XSS.
<c:out value="${userInput}" />
Dans mon prochain article, j'aborderai Path Traversal.
Les commentaires / réactions sont toujours les bienvenus car je cherche toujours à améliorer le contenu et à être meilleur.
Rédaction de la source : Ma propre expérience dans App Sec, paraphrasant le contenu de plusieurs sites Web en ligne, Open AI, DALL-E, Developer et NLP tools.
Merci!
Ajoutez-moi sur LinkedIn
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































