[Python-de] bottle-template: syntax error

Marcel Hellkamp marc at gsites.de
Di Sep 3 22:27:01 CEST 2013


On 03.09.2013 21:14, Michael Ströder wrote:
> Marcel Hellkamp wrote:
>> Die Benutzer-Eingaben, die in ein Template hinein gerendert sind, sind
>> etwas völlig anderes. Die werden nicht ausgeführt oder durch eval()
>> gejagt. Das ist bei keiner Template Engine so, das wäre ja auch
>> reichlich blöd.
> 
> Nun ja, kommt halt drauf an, ob die Erkennung der Code-Grenzen in den
> Templates immer richtig funktioniert.

Nein, darauf kommt es eben nicht an. Benutzereinhaben (Template
Variablen) werden niemals ausgeführt oder als Code interpretiert. Ich
versuche es mal mit einem Beispiel:

Ein Template::

  Die Variable 'var' enthält: {{var}}

Wird (einmalig) in folgenden Python Code übersetzt (stark vereinfacht):

  return u'Die Variable \'var\' enthält: ' + escape_html(unicode(var)) +
u'\r\n'

Dieser Schnipsel wird mit compile() in ein Code Object übersetzt, das
man mit eval ausführen kann.

Jerdes mal, wenn du ein Template renders, passiert zum Beispiel das hier:

  eval(compiled_template, {'var': bottle.request.forms.field_name})

Der Inhalt von 'bottle.request.forms.field_name' steht also in der
variable 'var' wenn das template ausgeführt wird. var ist ein String,
wird als String verarbeitet und kann keinen Schaden an richten.

Ganz egal was in 'var' steht, das "rendern" eines Templates ist sicher,
solange im Template selbst kein Schadcode steht.




Mehr Informationen über die Mailingliste python-de