mmofacts.com

MySQL Sicherheit mit C#

gepostet vor 17 Jahre von kevka
Hi,
auf Anregung aus dem einsichtbaren Entwicklerforum habe ich beschlossen mein BG mit C# als eigenständigen Webserver zu programmieren.
Als Datenbank will ich weiter MySQL benutzen und deswegen habe ich mir den MySQL NET/Connector heruntergeladen. Dieser funktioniert fabelhaft.
Jetzt bin ich gerade dabei eine komfortable Datenbankklasse zu schreiben.
Da ich mich nicht so gut mit SQL Injekts auskenne, wollte ich euch fragen, was ihr von meiner Sicherheitsfunktion haltet:

private String saveParameter(String Par, Boolean Int)
{
String OP = "";
if (Int)
{
try
{
Int32 Temp = Convert.ToInt32(Par);
OP = Convert.ToString(Temp);
}
catch
{
OP = "NULL";
}
}
else
{
OP = Par.Replace("\"", "");
OP = "\"" + OP + "\"";
}
return OP;
}
Schon mal Danke im voraus.
MfG Kevka
gepostet vor 17 Jahre von altertoby
ich würde es eher mit Int32.TryParse() und HtmlEncode machen...
also bei mir wird es einfach ohne große Änderung in die DB getan (sag mal wozu brauchst du das mit dem int ? mach doch einfach den Funktionsaufruf als int und nicht mit nem string und dann haste das problem nicht...die Usereingabe wird dann halt im UI bereich in nen richtigen Int umgewandelt)...
und beim Auslesen werden Strings (Nachrichten,...) mit HtmlEncode ausgegeben...
soweit ich weiß überprüft die SQL Klasse auch schon auf Injections... von daher
gepostet vor 17 Jahre von TheUndeadable
Da ich mich nicht so gut mit SQL Injekts auskenne, wollte ich euch fragen, was ihr von meiner Sicherheitsfunktion haltet:

Falscher Ansatz....
Pseudecode:
SqlCommand oCommand = oConnection.CreateCommand();
oCommand.CommandText = "SELECT * FROM abc WHERE bla=?bla AND createdoCommand.AddParameter ( "?bla", strText );
oCommand.AddParameter ( "?created", DateTime.Now );
oCommand.ExecuteReader();
In C# baut man keine SQL-Statement von Hands. Dies ist zu unsicher und hat auch Probleme, wenn man zum Beispiel Datumsangaben konvertieren muss. Der Datenbankprovider kümmert sich um alles notwendige.
Und nur als Hinweis: Der MySQL-C#-Connector steht unter der GPL, sollte dich aber als reine Webapplikation nicht stören.
BTW: Das Auslesen geht so relativ gut:
using ( IDataReader iReader = oCommand.ExecuteReader() )
{
while ( iReader.Read() )
{
int n = Convert.ToInt32( iReader [ "spalte" ] );
}
}
NACHTRAG:
> mein BG mit C# als eigenständigen Webserver zu programmieren.
Kenn ich doch irgendwoher ;-)
gepostet vor 17 Jahre von kevka
Original von TheUndeadable
Falscher Ansatz....

Danke, ich habe mir nur ein Beispiel angesehen und dort wurde einfach ein String ausgeführt. Also habe ich eine PHP Klasse ´nach C# portiert.
Original von TheUndeadable

> mein BG mit C# als eigenständigen Webserver zu programmieren.
Kenn ich doch irgendwoher ;-)
Original von TheUndeadable

Hätte ich gewusst, dass die Integration von Java oder C# in einem Webserver so leicht geht, hätte ich mir nie PHP angeschaut.
^^
MfG Kevka
gepostet vor 17 Jahre von kevka
Habe mir jetzt nen ParameterManager geschrieben:

class PrameterManager
{
private Dictionary Store = new Dictionary();
public String add(String Parameter)
{
String Key = "?" + Store.Count.ToString();
Store.Add(Key, Parameter);
return Key;
}
public void ReplaceParameters(MySqlCommand Command)
{
foreach(KeyValuePair KeyValue in Store)
{
Command.Parameters.Add(KeyValue.Key, MySqlDbType.VarChar);
Command.Parameters[KeyValue.Key].Value = KeyValue.Value;
}
}
}

Auf diese Diskussion antworten