Best practices für die Verwendung von SqlCommand
Ich möchte sicherstellen, dass bei der Verwendung von SqlCommand, dass ich unter Verwendung der besten Praktiken, insbesondere in Hinblick auf die Sicherheit.
Überlegungen, die ich bin mir nicht sicher über:
- Ist es ok, um Sie manuell erstellen Sie die Zeichenfolge anfügen? Wenn nicht, wie sollte ich es tun?
- Welche Klassen sollte ich auf der Suche mit statt?
- Die Frage wäre besser, wenn du uns ein Beispiel von dem, was Sie tun, imho
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr erste Frage ist im Gespräch über den Bau von SQL einschließlich der Werte direkt, das ist fast sicher nicht okay. Es öffnet sich Ihnen bis zu SQL-injection-Angriffe, sowie Fragen im Zusammenhang mit Umbauten (z.B. um das richtige Datum/Zeit-format).
Verwenden Sie stattdessen eine parametrisierte Abfrage, und stellen Sie die Werte in die Parameter. Siehe die Dokumentation für
SqlCommand.Parameter
für ein Beispiel.Aus Interesse, hast du einen bestimmten Grund für die Verwendung von SQL direkt, anstatt über eine der vielen ORMs um? (LLBL, Entity Framework, NHibernate, LINQ to SQL, SubSonic, Massiv, SimpleData, Dapper...)
declare @someParam int = 12
etc zum abgebenIch würde sagen, die Verwendung von Parameter ist einer der wichtigsten Aspekte für die Sicherheit. Dies wird verhindern, dass SQL-Injection in die Datenbank. Die folgenden SQLCommand ist ein Beispiel, wie ich würde bauen ein (im VB.NET, Entschuldigung - keine C# - Kenntnisse - noch ;))
Und ein Beispiel für einen inline-SqlCommand:
Mein Rat: seien Sie faul. Schreiben voluminösen code ist ein guter Weg, um Gehirn-tot-Fehler (falscher Datentyp, null Kontrollen, fehlende Dispose(), etc), und es hat null performance-Vorteil gegenüber vielen Helfer-tools.
Ich persönlich bin ein großer fan von dapper (ich bin aber auch etwas voreingenommen), das macht die Sache einfach:
Die Parametrierung und Materialisierung für Sie ohne Schmerzen, und dummerweise fallen.
Für andere Szenarien, insbesondere wenn Sie verwenden möchten, OO-Techniken, um das system aktualisieren, ein ORM wie EF oder L2S sparen Sie Arbeit, Zeit (und bessere Typüberprüfung mittels LINQ).
Je, wenn ich POC oder persönliche kleine Projekte, die ich normalerweise Baue meine strings manuell, aber wenn ich in einem Projekt für Arbeit haben wir eine Vorlage für die DB-Nutzung und die Verbindung, die ich verwenden muss und kann hier natürlich nicht verraten.
Aber ich denke, es ist ok, um manuell bauen für die grundlegenden Vorgänge in kleinen Projekt-oder POC.
Wenn Sie um die Sicherheit besorgt, ich empfehle erstellen Sie Ihre Abfragen als Gespeicherte Prozeduren im SQL Server-Datenbank statt (um zu verhindern, dass sich Gedanken über SQL-injection), und dann aus der front-end-code, generieren Sie einfach eine Gespeicherte SQL-Prozedur, die Parameter hinzufügen, und tun es so.
Diese Artikel sollte Ihnen zu helfen mit der Einstellung.
sp_executesql
viel zu liberal und die öffnung ein Loch ist.Sollten Sie immer die Praxis der Anwendung der mindestens Berechtigungen auf Datenbank-verbindungen durch die Kommunikation mit der Datenbank über gespeicherte Verfahren.
Store Procs
Die Anmeldeinformationen für die Verbindungszeichenfolge für die Datenbank:
A. Integrierte Sicherheit für Unternehmens - /intranet
B. Halten Sie es verschlüsselt in der registry oder einer Datei, in der Hosting-Anbieter.
Immer auf der Suche nach Hackern, die versuchen zum hochladen von cross-scripting in Ihren Formen.
Überprüfen Sie immer die Eingaben für SQL-injection.
Ich denke, das ist die beste Lösung