====== LU02f - LB2 - Fokusthema: SQLi ======
===== 1. Einleitung =====
Dieses Thema ist gerade deswegen spannend, weil in dieser alle drei Schichten einer 3-Schichten-Architektur miteinbezogen werden müssen.
- Schicht: Sie benötigen eine Art Frontend-Simulation wie beispielsweise Postman oder Commandline-basiertes Backend-Script. Es braucht also keine schicke Oberfläche.
- Schicht: Sie müssen einen Node-Server programmieren.
- Schicht: Es braucht eine sinnvolle Datengrundlage, um SQL-Attacken durchführen zu können.
===== 2. SQLI-Angriffe =====
==== 3.1 Leicht umsetzbare Angriffe ====
* **Angriffe gegen die Vertraulichkeit:** Es können Daten aus einer Tabelle gelesen werden, die nicht gelesen werden dürften.
==== 3.2 Mittel umsetzbare Angriffe ====
* **Angriffe gegen die Verfügbarkeit:** Das System wird zum Absturz gebraucht, sodass Online-Dienste nicht mehr angeboten werden können.
==== 3.3 Schwer umsetzbare Angriffe ====
* **Angriffe gegen die Integrität:** Die Daten werden verändert, ohne dass die betroffene Person davon weiss.
===== 3. Gegenmassnahmen gegen SQLi =====
==== 3.1 Leichte Massnahmen ====
* **Escaping:** Spezielle Zeichen in Eingaben werden maskiert, damit sie von der Datenbank als Daten und nicht als Teil des SQL-Codes interpretiert werden.
* **Input Validation:** Überprüfung, ob Eingaben dem erwarteten Format, Typ oder Wertebereich entsprechen, bevor sie weiterverarbeitet werden.
==== 3.2 Mittel-Komplexe Massnahmen ====
* **Prepared Statement:** die technische Umsetzung auf DB-Seite (vorkompiliertes Statement, wiederverwendbar).
* **Parametrisierung:** das Konzept, Werte sauber von der SQL-Struktur zu trennen.
==== 3.3 Komplexe Massnahmen ====
* **Stored Procedure:** Vorgefertigte und in der Datenbank gespeicherte SQL-Routinen, die mit Parametern aufgerufen werden können, statt dynamisch SQL zusammenzubauen.
===== 4. Bewertung =====
==== 4.1 Hinweise ====
* Es braucht kein Frontend, sprich der Code kann entweder über Commandline oder als separates Angriffsscriptdurchgeführt werden.
* Jedes Teammate kann alle Fragen zum Fousthema beantworten, sprich der Wissentransfer im Tandem wird durch das Tandem sichergestellt.
* Bei Ungleicher Performance im Tandem wird individuell benotet.
* Die Thementeams werden in Konkurenz zueinander treten. Sofern ein wesentzlicher Teambeitrag vorhanden ist, erhält jedes Gewinnerteam-Mate jeweils einen Bonus von 0.25 Notenpunkten.
==== 4.2 Malus ====
^Noten ^Beschreibung ^Hinweis ^
| -1.0 | Die Best-Practice-Coding-Standard wurden nicht eingehalten | [[https://wiki.bzz.ch/howto/codingstandards/start|Python]] |
| -0.5 | Es wird nicht kollaborativ und Ausfallsicher (inkl. Versionierung) gearbeitet |
| -2.0 | Es können Fragen zum Lösungcode nicht korrekt oder gar nicht beantwortet werden. |
| -1.5 | Pro angefangenem Tag Verspätung|
| -0.5 | Pro Downloadversuch: Link funktioniert nicht (abgelaufen, Berechtigungen fehlen, etc.)|
===== 4.2 Bonus ====
^Noten ^Beschreibung ^Hinweis ^
| +0.75 | Angriff gemäss einer Variante von 2.1 |
| +0.75 | Angriff gemäss je einer Variante und 2.2 |
| +1.0 | Angriff gemäss je einer Variante 2.3 |
| +0.75 | Verteidigung gemäss einer Variante von 3.1 |
| +0.75 | Verteidigung gemäss je einer Variante und 3.2 |
| +1.0 | Verteidigung gemäss je einer Variante 2.3 |
| +1.0 | Angriff und Verteidigung sind in separaten Files untergebracht|
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Volkan Demir