====== 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