96. SQL_ESC()

SQL_ESC(string)

Escapt“ (d. h. maskiert) einfache Anführungszeichen[227] (') in SQL-Befehlen, um „SQL Injection[228] zu verhindern. Dies ist hilfreich bei Verwendung der ODBC_...()-Datenbank-Funktionen (siehe Abschnitt 69, „ODBC_funktionsname()).

[Wichtig]Wichtig

Das ist ein gutes Beispiel dafür, warum man nie doppelte Anführungszeichen (") zum Begrenzen von Strings in SQL-Befehlen verwenden sollte, denn diese würden hier nicht maskiert. Also noch einmal: Verwenden Sie, ANSI-SQL-konform, einfache Anführungszeichen!

exten => 123,1,Set(name=philipp)
exten => 123,n,Set(telnr=${ODBC_SQL(SELECT `telnr` FROM `liste` WHERE `name`='${SQL_ESC(${name})}')}
exten => 123,n,Verbose(1,Telefonnummer ist: ${telnr})

Asterisk-Versionen: 

        |     |        | 1.4 |————————| 1.6 |————————

Interner Hilfetext zu dieser Funktion in Asterisk 1.4: 

  -= Info about function 'SQL_ESC' =-

[Syntax]
SQL_ESC(<string>)

[Synopsis]
Escapes single ticks for use in SQL statements

[Description]
Used in SQL templates to escape data which may contain single ticks (') which
are otherwise used to delimit data.  For example:
SELECT foo FROM bar WHERE baz='${SQL_ESC(${ARG1})}'

Differenz des internen Hilfetexts von Asterisk 1.2 zu 1.4: — in Asterisk 1.2 nicht vorhanden —

Differenz des internen Hilfetexts von Asterisk 1.4 zu 1.6: — keine —

Siehe auch. Abschnitt 69, „ODBC_funktionsname(), Abschnitt 71, „ODBC_SQL()



[227] Typografisch ist es zwar nicht korrekt, hier von „einfachen Anführungszeichen“ zu sprechen, denn es handelt sich um Apostrophe, aber das lassen wir mal außer Acht. Jeder Programmierer weiß, was gemeint ist.


AMOOCON 2010

Noch kein Ticket? Dann wird es Zeit. Nur noch wenige Tage.

Twitter

Flattr

Das gedruckte Buch

Werbung