|
Autor |
Nachricht |
boris
Beiträge: 11154
|
Titel: Escape-Zeichen in MSSQL
Verfasst am: Mo, 04 Mai 2009, 11:06 |
|
|
Daß man irgendwelche Benutzereingaben nicht direkt in einen SQL- (oder sonstigen Datenbank-)String übergibt, dürfte klar sein. Immer getreu der Maxime "All input is evil".
Sonst ist es ein Einfaches, eine sogenannte "SQL Injection" auszuführen. Hat man z.B. eine Seite mit einem Login, auf der Benutzername und Passwort abgefragt werden, könnte (aber sollte nicht) der Query zur Abfrage, ob ein Benutzer mit diesen Daten exisitiert, so lauten:
Code: |
SELECT user_id FROM user_table WHERE username = '{$_POST['username']' AND password = '{$_POST['password']}' |
In den $_POST-Variablen steht, was der Benutzer eingegeben hat. Sobald der der Query einen Eintrag in der Datenbank findet, wird die user_id zurückgegeben und der User kann eingeloggt werden.
Was aber, wenn der Benutzer das hier als Passwort angibt:
Durch das Hochkomma wird die Zeichenkette des Passworts beendet und eine weitere Bedingung in den Query eingefügt, der dann so aussieht:
Code: |
SELECT (...) AND password = '{$_POST['password']}' OR '' = '' |
was zur Folge hat, daß ALLE Datensätze zurückgegeben werden und der User sich ohne gültiges Passwort einloggen kann !
Abhilfe:
Alles, was böse ist, muß "escaped" werden, d.h. speziell das Hochkomma muß durch ein Zeichen ersetzt werden, das die Datenbank nicht veranlaßt, es als Ende sondern als Teil des übergebenen Strings zu sehen.
Dafür gibt es in MySQL die Funktion mysql_real_escape_string, die sich (neben dem Hochkomma) darum kümmert, daß keine unzulässigen Zeichen im Query landen.
Diese Funktion, die an die Datenbankverbindung geknüpft ist, gibt es aber (in PHP) für MSSQL nicht, mssql_real_escape_string (oder etwas ähnliches) ist nicht vorhanden, die MySQL-Variante kann für MSSQL nicht genutzt werden.
Jetzt die Preisfrage: wie lautet das Escape-Zeichen für ein Hochkomma in MSSQL ? Die naheliegendste Antwort "addslashes" funktioniert nicht, denn der Backslash ist bei MSSQL NICHT das Escape-Zeichen.
Lösung:
Das Escape-Zeichen für ein Hochkomma in MSSQL ist ... ein Hochkomma. Ein korrekt zu verarbeitender String sähe in MSSQL also so aus:
Code: |
SELECT * FROM table WHERE text = 'korrekt zu ''verarbeitender'' string' |
Das Wort "verarbeitender" ist mit ZWEI Hochkommas eingeschlossen, damit klappt es.
____________ beehave - home of humbug ... [we can't afford to be neutral]
|
|
Nach oben |
|
|
|
ähnliche Beiträge |
|
Thema
| Autor
| Forum
| Antworten
| Verfasst am
|
|
Film: Escape Plan: The Extractors |
boris |
zelluloid |
0 |
So, 28 Jan 2024, 10:11 |
|
Film: Escape Room |
boris |
zelluloid |
0 |
So, 07 Mai 2023, 16:16 |
|
Film: No Escape |
boris |
zelluloid |
0 |
So, 17 März 2019, 21:08 |
|
Film: Escape Plan |
boris |
zelluloid |
0 |
Mo, 14 Aug 2017, 21:01 |
|
Film: Prometheus - Dunkle Zeichen |
boris |
zelluloid |
0 |
Fr, 17 Okt 2014, 10:02 |
Schreiben: nein. Antworten: nein. Bearbeiten: nein. Löschen: nein. Umfragen: nein.
|