Benutzername    Passwort    Autologin    
  Passwort vergessen       Registrieren  
beeForum Foren-übersicht » hal9000
Neues Thema eröffnen   Neue Antwort erstellen Hervorhebung entfernen


Escape-Zeichen in MSSQL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
boris



Beiträge: 11154

Titel: Escape-Zeichen in MSSQL
Verfasst am: Mo, 04 Mai 2009, 11:06
Beitrag
Antworten mit Zitat

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:

Code:
' OR '' = '

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
Private Nachricht senden Website dieses Benutzers besuchen Rang:godmode methusalem 3. platz professioneller Sportangler Profi-Winzer (7x Hamm) Arcade-Meister, Rang 16 rainbow-cup
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    beeForum Foren-übersicht » hal9000 Seite 1 von 1
Gehe zu:  



ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Film: Escape Plan: The Extractors boris zelluloid 0 So, 28 Jan 2024, 10:11 Letzten Beitrag anzeigen
Keine neuen Beiträge Film: Escape Room boris zelluloid 0 So, 07 Mai 2023, 16:16 Letzten Beitrag anzeigen
Keine neuen Beiträge Film: No Escape boris zelluloid 0 So, 17 März 2019, 21:08 Letzten Beitrag anzeigen
Keine neuen Beiträge Film: Escape Plan boris zelluloid 0 Mo, 14 Aug 2017, 21:01 Letzten Beitrag anzeigen
Keine neuen Beiträge Film: Prometheus - Dunkle Zeichen boris zelluloid 0 Fr, 17 Okt 2014, 10:02 Letzten Beitrag anzeigen


Schreiben: nein. Antworten: nein. Bearbeiten: nein. Löschen: nein. Umfragen: nein.
phpBB © phpBB Group | impressum