Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m183:learningunits:lu10:lu10a [2025/12/27 19:11] – dgaravaldi | modul:m183:learningunits:lu10:lu10a [2026/01/28 16:30] (aktuell) – dgaravaldi | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== LU10a - Cross-Site Scripting | + | ====== LU10a - Cross-Site Scripting ====== |
| - | + | < | |
| - | **Cross-site scripting | + | \\ |
| + | ===== Einleitung ===== | ||
| + | Cross-Site Scripting | ||
| - | A successful | + | Bei XSS wird Script-Code von außen in die aktuelle Webseite injiziert. Damit wird eine Autorisierungsbarriere überschritten, denn Sie können so einer Website vorgaukeln, der eingeschleuste Code sei Ihr eigener. |
| \\ | \\ | ||
| - | ==== Types of XSS Attacks | + | ===== Beispiel |
| + | Ein kleines Beispiel soll dies untermauern. Stellen Sie sich eine simple Gästebuch-Anwendung vor, wie Sie sie in diesem Buch öfters finden. Hier zunächst eine Gästebuch-Datenbank (mit MySQL). | ||
| - | There are **two major types** of cross-site scripting attacks commonly discussed: | ||
| - | * **Stored XSS (Persistent)** – A malicious script is permanently injected into an application and served to all users. | + | {{: |
| - | * **Reflected XSS (Non-Persistent)** – A malicious script is embedded in a URL or request, then reflected off the web server back to the user’s browser when the link is visited. | + | |
| - | \\ | + | Was passiert aber, wenn Sie HTML-Code eingeben? Dieser Code wird dann ungefiltert ausgegeben. Sie können das Layout des Gästebuches verschandeln, |
| - | ==== What is Stored Cross-Site Scripting ==== | + | |
| + | {{: | ||
| - | To execute a **stored XSS attack**, the attacker must find a vulnerability in a web application where user input is stored without proper validation or escaping. A common example is when a comment field or form accepts | + | {{: |
| - | {{stored_xss_example.png?300}} | + | Das allein ist ja schon schlimm genug, doch noch übler wird es, wenn statt HTML-Code JavaScript-Code eingeschleust wird. Da gibt es verschiedene Stufen der Grausamkeiten |
| + | * Öffnen von modalen Warnfenstern mit '' | ||
| + | * unendliches Neuladen der Seite mit '' | ||
| + | * die Umleitung des Benutzers mit '' | ||
| + | * das Auslesen aller Cookies, beispielsweise mit '' | ||
| + | |||
| + | Aus guten Gründen wird dies nicht weiter ausgeführt, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| - | **Example**: | ||
| \\ | \\ | ||
| - | ==== Stored | + | ===== XSS-Auditor ===== |
| - | 1. The attacker discovers a page with an input field that allows HTML. | + | Die Gefahr für '' |
| - | 2. They insert malicious JavaScript code into that field. | + | |
| - | 3. The application stores and later serves that code as part of normal content. | + | {{: |
| - | 4. When other users visit the page, their browser executes the attack script. | + | |
| \\ | \\ | ||
| - | ==== How Stored XSS Endangers Users ==== | + | ===== Gegenmassnahmen ===== |
| - | Stored | + | Wirkungsvoll gegen XSS ist |
| + | * gründliche Input-Validierung | ||
| + | * Output-Escaping (in PHP mit der Funktion '' | ||
| - | * It can impact **all users** who view the infected page. | + | \\ |
| - | * Attacker-controlled scripts can steal session credentials or redirect users to phishing sites. | + | ===== Output-Escaping ===== |
| - | * Malicious payloads can embed external JavaScript that reports user data back to the attacker. | + | Ziel des Output-Escaping ist, dass im Webbrowser die Benutzereingaben niemals als Teil der Seite (d.h. mit deren HTML-Code) ausgeführt werden. Stattdessen werden die Benutzereingaben sozusagen entschärft und wie gewöhnliche Texte als ungefährlicher statischer Inhalt angezeigt. |
| + | In PHP wird h | ||
| \\ | \\ | ||
| - | ==== Related Topics | + | ===== Beispiel ===== |
| - | [1]: https://www.imperva.com/learn/ | + | Im folgenden Beispiel wird die eigene Funktion '' |
| - | [2]: https://www.imperva.com/learn/application-security/ | + | |
| - | [3]: https://developer.mozilla.org/docs/Web/Security/Attacks/ | + | **Code-01: ohne Escaping -> unsicherer PHP-Code** |
| + | < | ||
| + | ... | ||
| + | /** | ||
| + | * Liest ein einfaches Textfeld aus dem Formular aus | ||
| + | * @param $feld - Datenfeld, welches ausgelesen wird | ||
| + | * @return string - ausgelesenes Datenfeld als String | ||
| + | */ | ||
| + | function leseFeld($feld) | ||
| + | { | ||
| + | if (!isset($_POST[$feld])) { | ||
| + | return LEER_STRING; | ||
| + | } | ||
| + | if (!is_string($_POST[$feld])) { | ||
| + | return LEER_STRING; | ||
| + | } | ||
| + | return $_POST[$feld]; | ||
| + | } | ||
| + | ... | ||
| + | </code> | ||
| + | |||
| + | **Code-02: mit Escaping | ||
| + | < | ||
| + | ... | ||
| + | /** | ||
| + | * Liest ein einfaches Textfeld aus dem Formular aus | ||
| + | * @param $feld - Datenfeld, welches ausgelesen wird | ||
| + | * @return string | ||
| + | */ | ||
| + | function leseFeld($feld) | ||
| + | { | ||
| + | if (!isset($_POST[$feld])) { | ||
| + | return LEER_STRING; | ||
| + | } | ||
| + | if (!is_string($_POST[$feld])) { | ||
| + | return LEER_STRING; | ||
| + | } | ||
| + | return htmlspecialchars($_POST[$feld]); | ||
| + | } | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Daniel Garavaldi | ||