> > 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
_______________________________________________ TYPO3-german mailing list TYPO3-german@lists.netfielders.de http://lists.netfielders.de/cgi-bin/mailman/listinfo/typo3-german