Um Zeit zu sparen, schrieb ich ein SQL-Modul, das es mir erlaubt, Dinge in Kurzform zu schreiben, anstatt ein Objekt SqlCommand
jedes Mal initialisieren zu müssen, wenn ich Abfragen innerhalb eines Moduls ausführen wollte.Verwenden von WCF-Service zum Behandeln von SQL-Abfragen
Ich versuche jetzt, dieses Modul aus Sicherheitsgründen in einen WCF-Dienst zu verschieben (verhindert, dass die Winforms-App direkt auf die Datenbank zugreift). ist
die folgende Funktion zum Abfragen der Datenbank und gibt ein DataTable
der Ergebnisse verwendet
public DataTable FillTable(string sql)
{
query = new SqlCommand();
query.Connection = conn;
query.CommandText = sql;
DataTable dt = new DataTable();
try
{
conn.Open();
dt.Load(query.ExecuteReader());
conn.Close();
}
catch (Exception ex)
{
conn.Close();
Console.Write("fillTable: " + ex.Message);
}
return dt;
}
Da diese buchstäblich nur einen String als Eingabe verwendet, kann ich davon ausgehen, dass diese potenziellen Injection-Angriffe offen ist - trotz Wird es nicht direkt in der Datenbank ausgeführt? Wenn ein potenzieller Angreifer nur den Standort des Dienstes kennt (basierend auf der Dienstreferenz innerhalb der Anwendung), könnte die gesendete Zeichenfolge leicht ersetzt und nicht autorisierte Daten extrahiert werden?
Die Datenbank, mit der ich arbeite, ist nur klein, aber ich möchte sicherstellen, dass ich die Sicherheit richtig mache.
Natürlich weiß ich, ich könnte eine individuelle Funktion für jede Instanz schreiben, aber mit fast 100 Verwendungen innerhalb des Projekts bisher für diese Funktion allein, wäre es nicht nur ein Schmerz zu tun, sondern Wartung in der Zukunft wäre eine echte Kopfschmerzen
Es gibt nicht viel zu sagen. Ja, Ihr Code ist sehr anfällig für jede Art von Injection – Steve
Sie könnten dies als private Methode verwenden und verwenden. Sie müssen dies nicht als öffentlichen Webdienst bereitstellen. In jedem Fall muss jede API-Methode eine Authentifizierungs-/Berechtigungsprüfung haben. Wer diese Service-Methode nutzen will, muss das tun. – Aravind
Gibt es einen besonderen Grund, warum Sie immer noch plain SQL verwenden, anstatt zu Entity Framework und linq zu wechseln, die von SQL Injection nicht betroffen sein können? –