Datensätze maskieren und Security

Manchmal kann es vorkommen, dass wir Namen löschen wollen, die Sonderzeichen enthalten. Das führt unter normalen Umständen zu einem Problem:

test=# DELETE FROM t_person WHERE name = 'O'Reilly';
test'#

psql wartet auf weiteren Input, da wir eine ungerade Anzahl von Klammern verwendet haben. Das Problem kann wie folgt umschifft werden:

test=# DELETE FROM t_person WHERE name = 'O''Reilly';
DELETE 0

Klarerweise gibt es keine Person, die sich O'Reilly nett.

Viele Programmierer vergessen das sogenannte Escapen von Zeichen und erzeugen so eine wunderbare Sicherheitslücke, die Angreifer ausnutzen können:

test=# DELETE FROM t_person WHERE name = ' ' 
	OR name = 'Peter' OR name = ' ';
DELETE 0

Würde ein Angreifer in einem Programm, das nicht gegen Single Quotes geschützt ist, den String ...

 ' OR name = 'Peter' OR name = '

eingeben, hätten Sie ein echtes Problem. Stellen Sie daher sicher, dass die Parameter Ihres SQL Statements immer korrekt maskiert werden.



http://www.postgresql.at