Skip to content

Commit cd66580

Browse files
committed
Update Web security
1 parent af6456a commit cd66580

File tree

1 file changed

+21
-24
lines changed

1 file changed

+21
-24
lines changed

Material/Slides/27_Web_Security.md

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,15 @@ plantuml-format: svg
6969
- Asymmetrische Verfahren können auch für Signaturen genutzt werden
7070
- Signatur: Sicherstellen dass Daten nicht verändert wurden, und tatsächlich von bestimmtem Sender kommen (Integrity, kein Schutz der Confidentiality)
7171
- Zusätzlich zu den Daten wird eine Signatur generiert:
72-
- Hashwert über die Daten (eine Art Fingerabdruck der Daten)
72+
- Hashwert über die Daten (eine Art Fingerabdruck der Daten)
7373
- Verschlüsselt mit Private Key
7474
- Empfänger kann mit Public Key entschlüsseln und Hashwert über Daten berechnen
75-
- Stimmt der Hashwert mit dem entschlüsselten Wert überein, sind Daten unverändert
75+
- Stimmt der Hashwert mit dem entschlüsselten Wert überein, sind Daten unverändert
7676

7777
## Transport Layer Security (TLS) (1)
7878

7979
- Verschlüsselte Kommunikation
80+
8081
- HTTPS = HTTP + TLS
8182
- \rightarrow{} Schutz von Vertraulichkeit und Integrität
8283

@@ -95,7 +96,7 @@ plantuml-format: svg
9596
- Aus ausgetauschten zufälligen Daten generieren Server und Client unabhängig voneinander einen temporären Sitzungsschlüssel
9697
- Genauer Ablauf ist abhängig von TLS-Version und Cipher-Suites
9798
- Jeder HTTP Request wird mit dem Sitzungsschlüssel in einem symmetrischen Verfahren verschlüsselt übertragen
98-
- Github Pages, Cloudflare Pages, Netflify, Vercel, ... verschlüsseln ohne Konfiguration standardmäßig
99+
- Github Pages, Cloudflare Pages, Netflify, Vercel, ... verschlüsseln ohne Konfiguration standardmäßig
99100
- Kostenfreie TLS Zertifikate für Hosting auf eigenem Server: [Let's Encrypt](https://letsencrypt.org/)
100101

101102
## Theoretische Fragen
@@ -107,8 +108,7 @@ plantuml-format: svg
107108
- Erklären Sie den Begriff _Prevention_ / _Detection_ / _Recovery_.
108109
- Was ist der Unterschied zwischen symmetrischer und asymmetrischer Kryptografie?
109110

110-
111-
# Authentifizierung
111+
# Authentifizierung
112112

113113
## Grundlagen Authentifizierung (1)
114114

@@ -263,14 +263,13 @@ const jwt = await new jose.SignJWT({ someClaim: "someValue" })
263263
## Jose Beispiel - Verifizieren
264264

265265
```typescript
266-
import * as jose from 'jose';
266+
import * as jose from "jose";
267267
268-
const keyString = readFileSync('public-key.pem', 'utf-8');
268+
const keyString = readFileSync("public-key.pem", "utf-8");
269269
const key = await jose.importSPKI(keyString, "EdDSA");
270270
const { payload: unparsed } = await jose.jwtVerify(token, key, {
271271
issuer: "urn:issuer",
272272
});
273-
274273
```
275274

276275
- Dokumentation: [SignJWT](https://github.com/panva/jose/blob/main/docs/jwt/sign/classes/SignJWT.md)
@@ -286,7 +285,6 @@ const { payload: unparsed } = await jose.jwtVerify(token, key, {
286285
- Session-Hijacking Gegenmaßnahmen (z.B. kurzlebige Tokens mit Refresh-Token) notwendig
287286
- Schlüsselverwaltung + Rotation
288287

289-
290288
## Authentifizierung mit Bibliotheken und externen Services
291289

292290
- Übernehmen unterschiedlich viele Funktionen
@@ -299,7 +297,7 @@ const { payload: unparsed } = await jose.jwtVerify(token, key, {
299297

300298
## Beispiel-Bibliothek Auth.js
301299

302-
- [Auth.js](http://www.authjs.dev/)
300+
- [Auth.js](http://www.authjs.dev/)
303301
- Unterstützt Authentifizierung über OAuth (Google, Apple, GitHub, ...), Magic Links, Benutzername/Passwort, WebAuthn
304302
- Übernimmt neben Login und Session-Verwaltung auch die Verwaltung der User-Daten in eigener Datenbank
305303
- Einfache Adapter für z.B. Drizzle ORM oder Prisma
@@ -317,17 +315,15 @@ const { payload: unparsed } = await jose.jwtVerify(token, key, {
317315
- im Dev-Mode sind auch alle Addons (z.B. MFA) kostenlos)
318316
- Open Source Alternative: [StackAuth](https://stack-auth.com)
319317
- Noch nicht so ausgereift, aber grundsätzlich gleiche Features
320-
- Auch hier sind erste 10k Nutzer kostenlos
318+
- Auch hier sind erste 10k Nutzer kostenlos
321319
- Zusätzlich Self-Hosting, da vollständig Open Source
322320

323-
324321
## Theoretische Fragen
325322

326323
- Erklären Sie den Unterschied zwischen _Authentifizierung_ und _Autorisierung_?
327324
- Welche besondere Herausforderung gibt es bei der Authentifizierung im Web durch das HTTP-Protokoll?
328325
- Erläutern Sie welche Probleme bei der Authentifizierung mit Session-Cookies bei horizontaler Skalierung auftreten können.
329326

330-
331327
# Web-spezifische Sicherheitslücken
332328

333329
## Injection Attacks
@@ -350,13 +346,16 @@ Beispiel: Selektion von allen Posts mit einem Suchbegriff:
350346

351347
```sql
352348
SELECT * FROM posts WHERE title LIKE '<Suchbegriff>';
353-
````
349+
```
354350

355-
- Suchbegriff kommt z.B. aus einem Suchfeld und wird in Variable `search` gespeichert
351+
- Suchbegriff kommt z.B. aus einem Suchfeld und wird über Query-Parameter `query` übergeben
356352
- JavaScript baut die SQL-Abfrage:
357353

358354
```javascript
359-
const query = `SELECT * FROM posts WHERE posts.title LIKE '${req.query.query}'`;
355+
const query = request.query.query;
356+
const sql = `SELECT * FROM posts
357+
WHERE posts.title
358+
LIKE '%${query}%'`;
360359
```
361360
362361
## SQLi Einführung (2)
@@ -410,7 +409,7 @@ db.execute(query, [search]);
410409
411410
## Praxisaufgabe 1
412411
413-
1. Probiert die SQL-Injection im Beispiel-Code in `27_Web_Security/injections` wie zu triggern, um alle posts abzurufen. (_Hinweis_: ist in diesem Beispiel sogar noch einfacher)
412+
1. Probiert die SQL-Injection im Beispiel-Code in `27_Web_Security/injections` wie zu triggern, um alle posts abzurufen.
414413
2. Ruft zusätzlich die IDs und Namen aller Autoren ab (_Hinweis_: `UNION SELECT` und füll-Felder ;) )
415414
3. Fixt die SQL-Injection im Beispiel-Code mit Hilfe der Doku: [https://www.npmjs.com/package/sqlite](https://www.npmjs.com/package/sqlite)
416415

@@ -420,9 +419,9 @@ db.execute(query, [search]);
420419

421420
Verschiedene Arten:
422421

423-
- Reflected: Eingabe wird vom Server an Nutzer zurückgegeben, aber nicht gespeichert
424-
- Stored: Eingabe wird gespeichert und später ausgegeben
425-
- DOM-Based: Eingabe wird durch JavaScript fehlerhaft verarbeitet
422+
- Reflected: Eingabe wird vom Server an Nutzer zurückgegeben, aber nicht gespeichert
423+
- Stored: Eingabe wird gespeichert und später ausgegeben
424+
- DOM-Based: Eingabe wird durch JavaScript fehlerhaft verarbeitet
426425

427426
## XSS Einführung (2)
428427

@@ -486,8 +485,8 @@ Einfaches Beispiel: `<script>alert('XSS')</script>` als Suchbegriff
486485
## Praxisaufgabe 2
487486

488487
Die Anwendung aus Praxisaufgabe 1 hat auch eine Stored XSS Lücke.
489-
Zeigt, wie sich diese mit Hilfe von curl ausnutzen lässt und injiziert ein Script, dass den Hintergrund der Seite ändert.
490-
(_Hinweis_: da das JavaScript der Suche den Code dynamisch einbindet, probiert es mit inline Event-Handlern in HTML Attributen oder javascript URLs)
488+
Zeigt, wie sich ein Script injizieren lässt, dass den Hintergrund der Seite ändert.
489+
(_Hinweis_: Zum Speichern wird der Endpunkt `/post` benötigt. Da das JavaScript der Suche den Code dynamisch einbindet, probiert es mit inline Event-Handlern (`onclick` etc.) in HTML Attributen oder javascript URLs)
491490

492491
## Cross-Site Request Forgery (CSRF)
493492

@@ -569,7 +568,6 @@ Zeigt, wie sich diese mit Hilfe von curl ausnutzen lässt und injiziert ein Scri
569568
- Kann auch inline-Scripte wieder erlauben
570569
- Mehr Informationen bei [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)
571570

572-
573571
## Theoretische Fragen
574572

575573
- Erklären Sie den Begriff _Injection Attack_.
@@ -583,7 +581,6 @@ Zeigt, wie sich diese mit Hilfe von curl ausnutzen lässt und injiziert ein Scri
583581
- Was kann ein Angreifer durch einen XSS-Angriff erreichen?
584582
- Erklären Sie den Begriff _Content Security Policy_ und nennen Sie den Hauptvorteil der sich daraus ergibt.
585583

586-
587584
# OWASP Top 10
588585

589586
## Grundlagen

0 commit comments

Comments
 (0)