[TYPO3-german] Re: [TYPO3-german] SQL-Injections in CONTENT möglich?

JoH asenau info at cybercraft.de
Thu Jul 19 22:36:06 CEST 2007


> > kann mir jemand sagen, ob folgender Code gefährlich ist:
> >
> > test = CONTENT
> > test {
> >         table = tt_content
> >         select.selectFields = *
> >         select.where = 1=1
> >         select.andWhere.insertData = 1
> >         select.andWhere (
> >          tt_content.pid = {GPvar:test}
> >         )
> > }
> >
> > Ist meine Seite dann über den Parameter test Angreifbar?
> >
> > Geht der Inhalt von "andWhere" direkt in das SQL für die Datenbank?
> >
> > Und wenn ja, gibt es eine Möglichkeit den Inhalt via mysql_real_escape
oder
> > ähnlichem zu behandeln? Muss ich da ne User-Funktion schreiben?
> >
>
> eine interessante Frage. Ich kann sie Dir nicht 100%ig beantworten. Ein
> paar Gedanken dazu kann ich aber nicht zurückhalten:
>
> 1) "andWhere" wird in der class.tslib_content.php in der Methode
> getWhere() verarbeitet (das ergab jedenfalls meine Suche im Sourcecode
> von TYPO3 4.0. [1]
>
> 2) "andWhere" bietet die Möglichkeit, sich mit stdWrap am Inhalt
> auszutoben. Dort könnte man beispielsweise "intval" benutzen, um
> sicherzustellen, dass es ein Integer-Wert ist, oder crop, um die
> Stringlänge einzugrenzen (ferner htmlSpecialChars, aber von
> mysql_real_escape habe ich nichts gefunden, macht ja auch in stdWrap
> keinen rechten Sinn.
>
> 3) Probier's doch einfach mal selbst aus. Übergib dem Parameter mal
> etwas zuviel Daten und schau, wie er reagiert.

zu 1)
das bedeutet es wird wie in exec_SELECTquery genutzt und dort steht im
source code klar und deutlich: Es wird per default keine Überprüfung
durchgeführt, sondern dem Nutzer selbst überlassen dies zu tun

zu 2)
Ich habe dazu bereits Ende letzten Jahres eine Meldung ans Security Team
geschickt und darum gebeten zumindest für TypoScript CONTENT und numRows
(die bei mit select arbeiten) per default eine Überpürfung einzubauen. Dann
kann exec_SELECTquery weiterhin arbeiten wie gewohnt, jedoch ist die Arbeit
mit TS auch ohne spezielle Kenntnisse sicher.

zu 3)
Geht problemlos.

Ein weiterer Lösungsvorschlag wäre, eine stdWrap Funktion einzuführen, die
in diesem Fall immer gesetzt werden sollte, aber auch anderweitig genutzt
werden könnte.

andWhere.blah = whatever
andWhere.realEscape = 1

Bisher gibt es keine fest eingebaute Lösung, wobei in diesem speziellen Fall
ein prioriCalc = intval helfen sollte.

test = CONTENT
test {
    table = tt_content
    select.selectFields = *
    select.where = 1=1
    select.andWhere {
        cObject = TEXT
        cObject.data  = GPvar:test
        prioriCalc = intval
        wrap = tt_content.pid=|
    }
}

Dennoch sollte IMHO kurzfristig eine universellere Lösung vorgesehen werden.

HTH

Joey

-- 
Wenn man keine Ahnung hat: Einfach mal Fresse halten!
(If you have no clues: simply shut your gob sometimes!)
Dieter Nuhr, German comedian
openBC/Xing: http://www.cybercraft.de
T3 cookbook: http://www.typo3experts.com




More information about the TYPO3-german mailing list