Läste detta på swesecure.com, fattar inte... Det där gäller inte MySQL när du använder backslash (\) istället för att ersätta med dubbla fnuttar. Men jag har också reagerat på det påståendet och tycker det är ett dumt påstående. Om man gör enkelfnuttarna säkra, oberoende på hur man gör det, kommer de att vara säkra och allting behandlas som text.ööh...
Det är vanligt förekommande att ta hand om enkelfnuttar, genom att ersätta enkelfnutt till två enkelfnuttar. Exempelvis replace(str, "'", "''"). Detta är dock inte tillräckligt.
Om en användare exempelvis registrerar en användare med namnet admin'-- och lösenord password så kommer vi få följande insert till databasen: sql = "insert into users values(222, 'admin''--', 'password')" Detta ser ju helt korrekt ut. Men om vi sedan tänker oss att
Okej, så om vi ersätter enkelfnuttarna med dubbel, så får vi användarnamnet
admin''--
Om jag istället tar bort enkelfnuttarna helt från användarinmatningen då? Problemet löst?
En annan fråga - om jag ersätter ' med chr(34) vilket är ", hur uppträder den i SQL koden? uppträder den som två enkelfnuttar efter varandra, eller som ett eget tecken som är helt ofarligt?Sv: ööh...
När du gör specialtecken säkra kommer det som sätts in i databasen att vara det användaren skrev in.
Alltså, skriver användaren in admin'-- och du kör en Replace(string, "'", "''") på det och använder det i SQL frågan kommer det att bli admin''--
Men om du sedan tar ut det ur databasen igen får du ut det som användaren skrev in, alltså admin'--
Som sagt, jag skulle påstå att det där är helt fel som de skriver på swesecure.com, om ingen annan kan förtydliga vad de menar...