Cross-Site-Scripting (XSS)
Hallo,
Vielen Dank, dass Sie sich die Zeit genommen haben, den Artikel zu lesen! Ich schätze es!
Der heutige Inhalt befasst sich mit dem Verständnis von „Cross-Site Scripting (XSS)“.
Der Inhalt basiert vollständig auf meinen persönlichen Erfahrungen und Kenntnissen, Interaktionen mit unglaublichen Leuten im Bereich App Sec und Softwareentwicklung sowie viel Lektüre und sicheres Codieren.
In diesem Artikel werde ich versuchen, den Inhalt grundsätzlich zu vereinfachen. Ich bin sicher, dass die Leser ihre eigenen Gedanken und Kommentare haben werden, und ich freue mich über jedes Feedback und jede Diskussion.
Ansichten/Kommentare/Meinungen sind meine eigenen und nicht die meines früheren/aktuellen Arbeitgebers.
Lasst uns gemeinsam lernen!
Was ist XSS?
Einfach ausgedrückt handelt es sich bei XSS um eine Art Anwendungssicherheitslücke, die es einem Angreifer ermöglicht, bösartigen Code in eine Webseite einzuschleusen.
Dieser Schadcode wird im Kontext des Browsers des Opfers ausgeführt und ermöglicht es dem Angreifer, die Sitzung des Opfers zu stehlen und auch Daten zu stehlen.
Verschiedene Arten von XSS:
Gespeichertes (persistentes) XSS: Bei gespeichertem XSS werden die schädlichen Skripte dauerhaft auf einem Server gespeichert. Das bedeutet, dass der böswillige Hacker eine Schwachstelle auf der Website finden muss, die das Einschleusen eines bösartigen Skripts ermöglicht. Wenn das Opfer die gespeicherten Informationen abfragt, wird das vom Hacker eingeschleuste Schadskript vom Server abgerufen und im Browser des Opfers ausgeführt.
Reflektiertes XSS: Bei reflektiertem XSS fügt ein Angreifer bösartigen Code/bösartiges Skript in eine Website ein, der an den Browser des Opfers zurückgespiegelt wird. Dies bedeutet, dass eine böswillige HTTP-Antwort genau dieselben Daten enthält (die weder validiert noch codiert sind), die eine Anwendung in einer HTTP-Anfrage erhalten hat.
Dom (Client – Seite) XSS: Bei DOM XSS fügt ein Angreifer einen bösartigen Code/ein bösartiges Skript ein, um das DOM einer Webseite des Browsers des Opfers zu ändern.
So beheben Sie XSS:
Jetzt muss jeder Parameter und jede Variable auf einer Webseite gesichert werden.
Ein Verständnis – jeder Parameter muss eine Eingabevalidierung und Ausgabekodierung (Santisierung) durchlaufen (gemäß dem Datenkontext).
Ich werde verschiedene Schritte zur Durchführung der Ausgabevalidierung/-codierung auflisten:
Punkt net
AntXssEncoder —https://learn.microsoft.com/en-us/dotnet/api/system.web.security.antixss.antixssencoder?view=netframework-4.8
Namespace: System.Web.Security.AntiXss
Assembly:System.Web.dll
Klasse: AntiXSSEncoder
using System.Web.Security.AntiXss;
....
string inputStr = "<script>alert('a test xss attack script');</script>";
string encodedInput = AntiXssEncoder.HtmlEncode(inputStr, false);
....
Einige andere wichtige Methoden innerhalb von AntiXssEncoder(), wenn es um die Kodierung entsprechend dem Kontext des Werts geht. Ich werde nicht näher auf ihre Details eingehen, aber einige davon hier auflisten –
CssEncode() – Codiert die angegebene Zeichenfolge zur Verwendung in Cascading Style Sheets (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);
...
Nutzen Sie Encoder() von ESAPI
Verknüpfung :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() – Daten zur Verwendung in HTML-Attributen kodieren.
encodeForJavaScript() – Daten zum Einfügen in einen Datenwert oder ein Funktionsargument in JavaScript kodieren
encodeForXMLAttribute() – Daten zur Verwendung in einem XML-Attribut kodieren
Ausgabekodierung in Javascript
Verwenden Sie niemals innerHTML. innerHTML ist eine Eigenschaft von DOM und wird zum Festlegen oder Abrufen von HTML-Inhalten aus einem Element verwendet. innerHTML ist gefährlich, da es den Inhalt als reines HTML selbst und nicht als Text darstellt.
Verwenden Sie anstelle von innerHTML 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): In JSTL können Sie das <c:out>-Tag verwenden, um die Ausgabe zu maskieren und XSS zu verhindern.
<c:out value="${userInput}" />
In meinem nächsten Beitrag werde ich auf Path Traversal eingehen.
Kommentare/Feedback sind immer willkommen, da ich stets bestrebt bin, den Inhalt zu verbessern und darin besser zu werden.
Quellenbeschreibung: Meine eigene Erfahrung in App Sec, Paraphrasierung des Inhalts mehrerer Online-Websites, Open AI, DALL-E, Entwickler- und NLP-Tools.
Danke schön!
Fügen Sie mich auf LinkedIn hinzu

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































