SQL_ESC(string
)
„Escapt“ (d. h. maskiert) einfache
Anführungszeichen[233] (
'
) in SQL-Befehlen, um „SQL
Injection“[234] zu verhindern. Dies ist hilfreich bei Verwendung der
ODBC_...
()
-Datenbank-Funktionen
(siehe Abschnitt D.69, „ODBC_funktionsname
()
“).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 —[233] 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.
[234] SQL-Einschleusung, http://de.wikipedia.org/wiki/SQL-Injection