womodo und SQL-Injections

5. Dezember 2017
SQL-Injection ist ein beliebtes Verfahren, Webserver anzugreifen, um unerlaubt Daten auszulesen, zu verändern oder Daten zu löschen. Im womodo CMS können solche Angriffe durch die Verwendung von "Query-Parametern" bei Datenbankabfragen zuverlässig verhindert werden.

sql-injection.pngDer Angriff per SQL-Injection nutzt aus, daß Datenbankabfragen häufig per String-Operationen berechnet werden, bei denen Teile vom Website-Besucher beeinflußt werden können. Die Logik einer Datenbankabfrage kann so von außen verändert werden und der Angreifer bekommt Kontrolle über auf dem Server gespeicherte Daten.


Ein klassisches Beispiel ist die Auswertung von URL Parametern bei der Berechnung von Datenbankabfragen:

<tml:query>
content.items['id'].text = '<tml:script expression="request.getParameter('id')"/>'
</tml:query>

Hier wird der URL Parameter "id" verwendet, um die tatsächliche Query zu berechnen. Bei Aufruf der Website mit Parameter "id=4711" ist das Ergebnis dann eine Query der Form

content.items['id'].text = '4711'

Das Problem hier ist, daß die Logik der Abfrage und die Daten nicht voneinander getrennt sind. Wenn ein Angreifer die Website mit dem URL Parameter "id=4711' OR 'x'='x" aufruft, wird daraus eine Query, die als Ergebnis anstatt genau ein Dokument mit id=4711 nun alle Dokumente liefert:

content.items['id'].text = '4711' OR 'x'='x'

Der Angreifer hat die Logik der Query in seinem Sinne verändert.

Query Parameter verhindern SQL-Injections

Im womodo CMS können solche Angriffe durch die Verwendung von Query-Parametern verhindert werden. Das sorgt dafür, daß Logik und Daten voneinander getrennt bleiben:

<tml:collection>
<tml:param name="id" expression="request.getParameter('id')"/>
<tml:query>
content.items['id'].text = :id
</tml:query>
</tml:collection>

Die Logik der Query bleibt so erhalten, unabhängig davon, wie der URL Parameter aussieht. Bei manipulierten URL Parametern bleibt das Ergebnis der Datenbankabfrage in der Regel einfach leer. Es werden keine unerwünschten Daten angezeigt.