[C#] Escape Funktion gesucht.

01/09/2013 12:55 Fehlgeschlagen#1
Hallo,

Ich suche eine Escape Funktion in der Sprache CSharp. Ich habe es schon
mehrmals versucht mit str.replace jedoch kann ich damit nur einen Charakter
ersetzen und wenn ich das ganze in einem Array mache klatscht er mir einen
Error auf die Nase.

Würdet ihr so nett sein und mir verraten was ich vergessen habe.

Code:
            string str = " ' or '1' = '1' -- ";

            string[] Suchen = new string[] { "" };

            string[] Ersetzen = new string[] { "" };

            str.Replace(Suchen, Ersetzen);
Fehlermeldung:

Quote:
Die beste Übereinstimmung für die überladene string.Replace(string, string)-Methode hat einige ungültige Argumente.

1-Argument: Kann nicht von "string[]" in "string" konvertiert werden.
01/09/2013 13:23 boxxiebabee#2
Soweit ich weiß nimmt die Funktion Replace nur Strings & Chars, jedoch keine Arrays.
01/09/2013 13:25 qkuh#3
[Only registered and activated users can see links. Click Here To Register...]
01/09/2013 13:33 Fehlgeschlagen#4
Quote:
Originally Posted by boxxiebabee View Post
Soweit ich weiß nimmt die Funktion Replace nur Strings & Chars, jedoch keine Arrays.
Hast du einen Tipp / Antwort für mich wie ich es am besten lösen könnte?

Quote:
Originally Posted by qkuh View Post
[Only registered and activated users can see links. Click Here To Register...]
Schon klar damit kann ich den String überprüfen ich möchte es aber
selbst bestimmen welche Charakter ich freigebe und welche nicht.

wenn du mir Erleutern könntest wie ich ein Array verwenden kann wäre
ich dir sehr vergund.
01/09/2013 13:47 boxxiebabee#5
Entweder mit ner Schleife, oder wenn die zu ersetzenden Zeichen immer durch das selbe ersetzt werden sollen:
Code:
string s = "the\nquick\tbrown\rdog,jumped;over the lazy fox.";
char[] chars = new char[] { ' ', ';', ',', '\r', '\t', '\n' };
string snew = chars.Aggregate(s, (c1, c2) => c1.Replace(c2, '\n'));
Edit:
Schleife:
Code:
string str = " ' or '1' = '1' -- ";
string[] Suchen = new[] { "-", "1" };
string[] Ersetzen = new[] { "a", "2" };

for (int i = 0, l = Suchen.Length; i < l; i++)
{
     str = str.Replace(Suchen[i], Ersetzen[i]);
}
01/09/2013 13:48 Fehlgeschlagen#6
Quote:
Originally Posted by boxxiebabee View Post
Entweder mit ner Schleife, oder wenn die zu ersetzenden Zeichen immer durch das selbe ersetzt werden sollen:
Code:
string s = "the\nquick\tbrown\rdog,jumped;over the lazy fox.";
char[] chars = new char[] { ' ', ';', ',', '\r', '\t', '\n' };
string snew = chars.Aggregate(s, (c1, c2) => c1.Replace(c2, '\n'));
OMG! Wie doof bin denn ich ne schleife und ich kann das Array trotzdem
verwenden danke für den Gedanken blitz.
01/09/2013 13:51 boxxiebabee#7
Kein Problem. Hab noch nen kurzes Beispiel reineditiert ;)
01/09/2013 13:52 Fehlgeschlagen#8
Quote:
Originally Posted by boxxiebabee View Post
Kein Problem. Hab noch nen kurzes Beispiel reineditiert ;)
Genau das meinte ich <^-^>

danke;
01/09/2013 14:05 nkkk#9
wozu bruchst du das? wenn du in C# Aus Sql Datanbanken zugreift Benutzt man im algemeinen das SqlCommand bzw MySqlCommand welches eine Parameters Eigenschaft hat. Wenn du das richtig einstezt übernimmt er das escaping für dich (zuminstedt bei mssql bei mysql bin ich mirt nicht sicher da ich es nicht benutzte)
01/09/2013 14:09 Fehlgeschlagen#10
Quote:
Originally Posted by nkkk View Post
wozu bruchst du das? wenn du in C# Aus Sql Datanbanken zugreift Benutzt man im algemeinen das SqlCommand bzw MySqlCommand welches eine Parameters Eigenschaft hat. Wenn du das richtig einstezt übernimmt er das escaping für dich (zuminstedt bei mssql bei mysql bin ich mirt nicht sicher da ich es nicht benutzte)
ClientSocket -> Senden Username, Passwort -> ServerSocket -> SQL Command

^^ ohne Escape Funktion würde ich gegen eine Sql Injektion nicht ankommen.

Sonst noch fragen ?
01/09/2013 16:03 nkkk#11
Quote:
Originally Posted by Fehlgeschlagen View Post
ClientSocket -> Senden Username, Passwort -> ServerSocket -> SQL Command

^^ ohne Escape Funktion würde ich gegen eine Sql Injektion nicht ankommen.

Sonst noch fragen ?
wieso? du benutzt doch SqlCommand zum schluss. Der macht die arbeit für dich wenn du es richtig benutzt.

ps für sachen wie passwort oder Username würde ich auch einfach keine sonderzeichen zulassen das löst dein problem auch und vermeidet probleme die später noch mit den sonderzeichen autreten könnten, kommt natürlcih darauf an um was für ein prorgamm es sich handelt.
01/10/2013 02:05 Fehlgeschlagen#12
Quote:
Originally Posted by nkkk View Post
wieso? du benutzt doch SqlCommand zum schluss. Der macht die arbeit für dich wenn du es richtig benutzt.

ps für sachen wie passwort oder Username würde ich auch einfach keine sonderzeichen zulassen das löst dein problem auch und vermeidet probleme die später noch mit den sonderzeichen autreten könnten, kommt natürlcih darauf an um was für ein prorgamm es sich handelt.
Es handelt sich dabei um einen Launcher/Patcher der meinen Client auf dem neuestem stand
Hält der noch viele andere Funktionen hat Und da es bei diesem Server es unmöglich ist
Imgame nach pw und user zu fragen weil dieser einen so genannten token dafür braucht muss
Ich User und pass zum Server senden der Server überprüft diese wenn sie richtig sind
Überprüft er noch andere Sachen wenn alles nicht zutrifft erstellt er einen token der 24 stunden aktiv ist und sendet den wieder an den Client socket und verarbeitet diesen
01/10/2013 17:06 nkkk#13
Quote:
Originally Posted by Fehlgeschlagen View Post
Es handelt sich dabei um einen Launcher/Patcher der meinen Client auf dem neuestem stand
Hält der noch viele andere Funktionen hat Und da es bei diesem Server es unmöglich ist
Imgame nach pw und user zu fragen weil dieser einen so genannten token dafür braucht muss
Ich User und pass zum Server senden der Server überprüft diese wenn sie richtig sind
Überprüft er noch andere Sachen wenn alles nicht zutrifft erstellt er einen token der 24 stunden aktiv ist und sendet den wieder an den Client socket und verarbeitet diesen
es handelt sich also um ein online spiel? naja da würde ich auch einach keine sonderzeichen im namen zulassen (ich nehme an man erstellt den (account)namen über eine von dir erstellte webpage?). Kann immer probleme geben mit sonderzeichen z.B. kann es passierten das leute nicht wissen wie man den namen schreibt und andre ihn dann nicht eingeben könnne, oder das dan 2 namen exakt gleich ausehen, und es dann zu verwechsungen kommt. etc.

Deshalb würde ich die buchsten im namen anhand einer whitelist filtern. DAs musst du dann natürlcih auchschon bei der accounterstellung machen.
01/11/2013 20:01 5anku#14
Du musst im Server den SQL-String auch escapen, ansonsten könnte man mit einem eigenen Socket SQL-Abfragen ausführen.
01/12/2013 04:10 Fehlgeschlagen#15
Quote:
Originally Posted by 5anku View Post
Du musst im Server den SQL-String auch escapen, ansonsten könnte man mit einem eigenen Socket SQL-Abfragen ausführen.
Du wie blond sehe ich denn aus ? so doof bin ich auch nicht ich benutze klassen die von mir selbst Geschieben wurden und die klassen verwende ich immer wieder weil ich sicherlich nicht alles immer von vorne schreibe und am ende sieht es genau so aus wie vorher. Aber danke dennoch für einen tipp einige würden es nicht wissen.

Ich hätte es so vorgehabt:

Client -> Username, Passwort -> Escape -> Encode -> Über TCP -> Server ->
Decode -> Escape -> SQL -> Error or Success to Client


PS: Das ist kein Flame!

-