Fehler in Stringfunktion // Injektion-Erkennung
-
Hallöle allerseits. Ich möchte per C++ Daten in einer MySQL speichern. Klappt auch hervorragend, allerdings möchte ich die Variablen vorher auf "bösen Code" überprüfen.
Ich habe eine recht "paranoide" Funtion geschrieben, die nur wenig erlaubt (bzw. erlauben sollte):
string machsauber(string s2check) { bool paranoia=false; bool found=false; string paranoiaTxt="(PARANOIA)"; string erlaubt="abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#_@!?.,;: "; for (int i=0; i<s2check.length(); i++) { found=false; for (int u=0; u<erlaubt.length(); u++) { if (s2check.substr(i,1)==erlaubt.substr(u,1)) { found=true; } } if (!found) { s2check.substr(i,1)="_"; paranoia=true; } } if (paranoia) { // s2check+=paranoiaTxt; } return (s2check); }Wenn ich die Funktion nun mit
subject=machsauber(subject)aufrufe, werden alle ungültigen Zeichen mit "_" ersetzt. Nur ausgerechnet einfache und doppelte Anführungszeichen (' + ") nicht. Wo ist der Bug?
-
Tomato schrieb:
Wenn ich die Funktion nun mit
subject=machsauber(subject)aufrufe, werden alle ungültigen Zeichen mit "_" ersetzt. Nur ausgerechnet einfache und doppelte Anführungszeichen (' + ") nicht. Wo ist der Bug?
Ich glaube nicht, dass deine Funktion irgendetwas ersetzt.
std::string::substr gibt eine Kopie des Teilstrings zurück. Eine Zuweisung an dieses temporäre Stringobjekt bewirkt im ursprünglichen String rein gar nichts. Benutz std::string::replace.An Stelle der inneren Schleife würde ich außerdem std::string::find empfehlen.