| 

.NET C# Java Javascript Exception

HQL Injection nach ORDER BY

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


HQL Injection nach ORDER BY

helgoboss - 08.05.2008 17:15
Hallo!

Wisst ihr, ob sich bei HQL eine Injection in der ORDER BY Klausel noch fatal auswirken kann?

Hintergrund: Ich habe eine etwas kompliziertere Anfrage, die ich meines Wissens mit dem Grails Hibernate Criteria Builder nicht konstruieren kann da sie eine korrelierte Unteranfrage benötigt:

select
    c.id, v.number 
from
    ContactVersion v
    inner join v.contact c
where
    v.number = (
        select max(v2.number)
        from ContactVersion v2
        where v2.contact.id = c.id
    )

Jetzt würde ich gerne per String-Konkatenierung die ORDER BY Klausel anhängen, denn die Reihenfolge der Ausgabe soll vom Benutzer festgelegt werden können. Kann ich das bedenkenlos machen oder besteht auch bei Injections nach ORDER BY noch Gefahr?

Viele Grüße
Benjamin


Re: HQL Injection nach ORDER BY

christian - 09.05.2008 09:12
Hallo Benjamin,

ich würde immer versuchen, so einen Angriff prinzipiell auszuschließen. Man kann sich manchmal gar nicht vorstellen, mit was für wilden Abfragen Angreifer an ihr Ziel kommen. Nicht zuletzt widerspricht es der Idee von Prepared Statements, wenn man diese zur Laufzeit ständig neu erzeugt. Neben der möglichen Gefährdung der Sicherheit ist das auch schlecht für die Performance.

Gruß
Christian


Re: HQL Injection nach ORDER BY

helgoboss - 09.05.2008 10:49
Hallo Christian!

OK, was würdest du stattdessen vorschlagen? Parametrisierung im JDBC-Style scheint hier nicht zu funktionieren :( Nachträgliches sortieren durch Groovy?

Viele Grüße
Benjamin


Re: HQL Injection nach ORDER BY

christian - 09.05.2008 10:51
Warum kann man den ORDER-BY-Parameter nicht getrennt übergeben?

Gruß
Christian


Re: HQL Injection nach ORDER BY

helgoboss - 09.05.2008 11:16
Ich habe es ausprobiert und bekomme einen Fehler.

Contact.executeQuery("select c.* from Contact c order by ?", ["c.id"])

Vermute, dass die Namen der ORDER BY Attribute schon zur Statement-Kompilierzeit bekannt sein müssen.

Gruß
Benjamin


Re: HQL Injection nach ORDER BY

christian - 09.05.2008 11:38
Du könntest auch mit einer Weißen Liste prüfen, ob ein Sortierkriterium zulässig ist. Eine HQL-Zeichenkette wird sicher nicht in dieser Liste enthalten sein, so dass der Angriff wirksam verhindert wird.

Wenn du aber schon die möglichen Kriterien im Programm niederschreibst, kannst du auch gleich für jede Möglichkeit eine Abfrage anlegen, die dann in Abhängigkeit von der Benutzerauswahl ausgeführt wird.

Gruß
Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "HQL Injection nach ORDER BY" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.