Hi, wollte gerade einen String zur Ausgabe erstellen: s = "prozentuale Spanne %.2f %" % 15.23 Ergebnis sollte seind: prozentuale Spanne 15.23 % Leider wirft das System einen "ValueError: incomplete format" aus. Gibt es eine Möglichkeit das %-Zeichen zu maskieren, dass es nicht nach einer weiteren Variablen sucht? "\%" funktioniert leider nicht. Bis dann, Volker -- "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ... Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail?ac=OM.GX.GX003K11711T4781a
Gute Idee, funktioniert leider nicht generell: "% %.2f" % 15.23 -> Fehlermeldung "% %.2f%" % 15.23 -> Fehlermeldung "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt Schade, nicht schlecht, leider kein genereller Ansatz. Bis dann, Volker -------- Original-Nachricht -------- Datum: Fri, 2 Feb 2007 13:33:37 +0100 Von: Hans-Peter Jansen <hpj@urpla.net> An: python-de@python.net CC: Betreff: Re: [Python-de] Maskierung von %
Am Freitag, 2. Februar 2007 schrieb Volker Helm:
Hi,
wollte gerade einen String zur Ausgabe erstellen:
s = "prozentuale Spanne %.2f %" % 15.23
Probier doch mal: s = "prozentuale Spanne %.2f%%" % 15.23
Pete
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-- "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ... Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail?ac=OM.GX.GX003K11713T4783a
Hallo Volker, On 2007-02-02 14:07, Volker Helm wrote:
Gute Idee, funktioniert leider nicht generell:
"% %.2f" % 15.23 -> Fehlermeldung "% %.2f%" % 15.23 -> Fehlermeldung "%.2f% %" % 15.23 -> "15,23%" Leerzeichen fehlt und wird immer entfernt
Schade, nicht schlecht, leider kein genereller Ansatz.
doch ein genereller Ansatz, - wenn man es richtig macht. ;-) Schreibe an der Stelle, wo das Prozentzeichen stehen soll, zwei Prozentzeichen direkt hintereinander:
"%.2f %%" % 15.23456 '15.23 %'
Beschrieben ist das unter http://docs.python.org/lib/typesseq-strings.html . Viele Grüße Stefan
Hallo, würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt mfg Light Lan
Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen. 02.02.2007, at 15:31, Paul Rauch wrote:
Hallo,
würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt
mfg Light Lan
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Tobias Bender schrieb:
Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen.
Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren. Stattdessen verwendet man die parametrisierte Form von cursor.execute, etwa so: cursore.execute("select * from some_table where some_column = %s", some_column_parameter) Mfg Diez
Diez B. Roggisch schrieb:
Tobias Bender schrieb:
Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen.
Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren.
Stattdessen verwendet man die parametrisierte Form von cursor.execute, etwa so:
cursore.execute("select * from some_table where some_column = %s", some_column_parameter)
Das ist bekannt. Aber eventuell hatte der Frager etwas anders im Sinn: In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte Funktion: mysql_escape_string Naja, schönes Wochenende an Alle.
On 02.02.07 16:40:09, Mathias Uebel wrote:
Diez B. Roggisch schrieb:
Tobias Bender schrieb:
Man könnte unerwünschte Zeichen mit re.sub einfach rauslöschen oder mit re.match testen und bei Bedarf eine exception werfen.
Das ist gefaehrlicher Unfug!!! Dabei kann einem viel zu viel passieren.
Stattdessen verwendet man die parametrisierte Form von cursor.execute, etwa so:
cursore.execute("select * from some_table where some_column = %s", some_column_parameter)
Das ist bekannt.
Das ist gut.
Aber eventuell hatte der Frager etwas anders im Sinn: In PHP gibt es, um derlei Angriffe auszuschließen, eine gesonderte Funktion: mysql_escape_string
Aehm in PHP gibts auch keine parametrisierte Funktion zum Ausfuehren von Anfragen, deswegen braucht man diese spezielle Funktion. Viel angenehmer ist es IMHO aber mit parametrisierten query-Funktionen zu arbeiten, weil ich dann nicht selbst aufpassen muss das alle Eingaben korrekt escaped werden. Andreas -- Make a wish, it might come true.
Hallo Paul, On 2007-02-02 15:31, Paul Rauch wrote:
würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt
siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie Andreas Pakulat richtig sagte: die escape-Funktion braucht man nicht. Der zusätzliche Parameter für cursor.execute ist die "richtige", sauberere, Lösung. Viele Grüße Stefan
Stefan Schwarzer schrieb:
Hallo Paul,
On 2007-02-02 15:31, Paul Rauch wrote:
würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt
siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie Andreas Pakulat richtig sagte: die escape-Funktion braucht man nicht. Der zusätzliche Parameter für cursor.execute ist die "richtige", sauberere, Lösung.
Viele Grüße Stefan
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
uhm, das verstehe ich nicht wirklich.. ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. sagen wir mal diese sind in der variable nutzerangaben gespeichert. und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht.. mfg Light Lan
Hallo Paul, On 2007-02-02 17:54, Paul Rauch wrote:
Stefan Schwarzer schrieb:
On 2007-02-02 15:31, Paul Rauch wrote:
würde gerne wissen welche funktion es in python gibt um gefährliche zeichen, wie ' in mysql zu escapen, damit mir keiner nen inject bastelt siehe meine Antwort in diesem Thread um 15:02 Uhr. Und wie Andreas Pakulat richtig sagte: die escape-Funktion braucht man nicht. Der zusätzliche Parameter für cursor.execute ist die "richtige", sauberere, Lösung.
uhm, das verstehe ich nicht wirklich.. ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. sagen wir mal diese sind in der variable nutzerangaben gespeichert.
und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt
und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht..
damit ich weiß, wie weit ich ausholen muss: Wie weit hast du meine Mail an die Liste (2007-02-02 15:02:39) verstanden oder nicht? Am besten antwortest du auf jene Mail und wir diskutieren dort im Thread weiter. Viele Grüße Stefan
und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt
und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht..
Statt einen SQL-String zusammenzubauen, der auch Benutzerdaten enthaelt, baust du einen von folgender Form: sql = "update db.table set x = %s where y = %s limit 1" Das ist der SQL-String. Und den verwendest du dann wie folgt: cursor.execute(sql, nutzerangaben, bla) Damit sorgt der Treiber dafuer, das alles richtig escaped wird, bzw. besser noch das obiges statement auf db-seite gecached wird und parametrisiert. Die %s in dem String sind Platzhalter - aber nicht _du_ fuellst die aus, sondern der Treiber. Das ist dadurch sicher. Diez
Paul Rauch schrieb:
uhm, das verstehe ich nicht wirklich.. ich nehme von diesem programm, dass ich schreiben will nutzerangaben an. sagen wir mal diese sind in der variable nutzerangaben gespeichert.
und dann will ich halt ein mysql.cursor.execute('UPDATE db.table SET x =\'Nutzerangeben\' WHERE y = \'bla\' LIMIT 1') und dabei verhindern, dass er weitere ' reinschmuggelt und dadurch ne mysqlinjection durchkriegt
So, wie Du das geschrieben hast, wird einfach der Text 'Nutzerangeben' (fest) in die Tabelle eingefügt. Ich dachte, Du wolltest den Text eingeben, der in der Variable nutzerangaben steht? Das schreibt man so mysql.cursor.execute("UPDATE db.table SET x =%s WHERE y ='bla' LIMIT 1", nutzerangaben) Das verhindert bereits, dass ' reingeschmuggelt wird.
und wie funktioniert dieser zusätzliche parameter, was macht der? versteh das nicht..
Die Parameter für execute funktionieren so ähnlich wie bei der %-Ersetzung, aber nicht ganz genau so. Vielmehr wird cursor.execute alle Parameter *automatisch* richtig escapen. Du musst nur an die Stelle, wo Du den Wert haben willst, im SQL %s schreiben (ohne Anführungszeichen - die macht .execute selber rein). Ciao, Martin
participants (9)
-
"Martin v. Löwis"
-
Andreas Pakulat
-
Diez B. Roggisch
-
Hans-Peter Jansen
-
Mathias Uebel
-
Paul Rauch
-
Stefan Schwarzer
-
Tobias Bender
-
Volker Helm