2009-06-01 10 views
1

Gibt es ein .NET-Projekt/dll, das das Entweichen benutzerergebener Eingaben in Datenbankabfragen für verschiedene Datenbanksysteme unterstützt?Escaping von SQL-Abfragen - Unterstützung für verschiedene Datenbankplattformen in .Net

Ich möchte, dass unser gesamtes Team standardisiert und ein Modul verwendet, um das Entweichen der vom Benutzer bereitgestellten Eingaben auszuführen, die dann in parametrisierten SQL-Abfragen verwendet werden.

Idealerweise möchte ich das Datenbanksystem (oracle, SqlServer, mySql usw.) in der Konfigurationsdatei angeben und Escape (VariablenName) aufrufen können, und es würde den String-Inhalt auf der Grundlage der aktuellen Datenbankeinstellung entkommen lassen in der Datei web.config.

Wenn nicht, wäre die zweitbeste Lösung ist so etwas wie EscapeForOracle, EscapeForSqlServer usw.

Auf ein Minimum das Projekt Oracle, SQLServer und MySQL-Unterstützung sollte.

Ich frage mich, ob ich dies intern erstellen muss oder ob ein vorhandenes kommerzielles/Open-Source-Produkt existiert, um dies zu tun.

+0

Sie sagen "parametrisierte SQL-Abfragen", und dann erwähnen Sie die Flucht. Nicht sicher, was du damit meinst. Könnten Sie einige konkrete Beispiele dafür geben, was Sie erreichen möchten? Ich könnte Startcode haben, den Sie verwenden könnten, wenn Sie den Weg der Inhouse-Entwicklung gehen wollen. –

+0

Lasse ist richtig - wenn Sie Parameter für alle von Ihnen bereitgestellten Daten verwenden (und nicht dynamische SQL in einem SP konstruieren), müssen Sie nicht entkommen - das ist der springende Punkt. –

+0

Sieht so aus, als hätte ich ein Projekt gefunden, das etwas Ähnliches macht: ESAPI (http://code.google.com/p/owasp-esapi-dotnet/). Leider unterstützt es an dieser Stelle nur Oracle und MySql und nicht SqlServer. Weitere Informationen finden Sie unter: http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_3:_Escaping_all_User_Supplied_Input Aber ich stimme zu - wenn Sie parametrisierte Abfragen verwenden - sieht es so aus, als sollte so etwas nicht benötigt werden . Weitere Informationen: http://www.owasp.org/index.php/ESAPI –

Antwort

2

Ich glaube nicht, dass Sie so etwas brauchen werden.

Verwenden Sie bei der Ausführung einer parametrisierten Abfrage/gespeicherten Prozedur eine Parametersammlung.
Geben Sie den entsprechenden Datentyp, die Länge und die Genauigkeit an & Geben Sie einen gültigen Wert ein.
Escaping wird vom DB-Provider durchgeführt.

Lassen Sie mich wissen, wenn ich Ihre Frage nicht richtig verstanden habe.

0

In .NET können Sie die generischen Klassen wie DbReader und DbConnection anstelle von SqlConnection verwenden. Wie Shahkalpesh und Lasse V. Karlsen sagte, können Sie Parameter verwenden und das Framework oder Treiber wird die Flucht für Sie behandeln.

Aber praktisch, wenn Sie ein Produkt für Oracle und Sql Server entwickeln möchten, sprechen Sie MAJOR Overhead. Das richtige Ausbrechen ist nur die Spitze des Eisbergs. Wenn Sie keinen Oracle- und Sql-Server-Testserver installiert haben, haben Sie wahrscheinlich noch nicht einmal gestartet :)

+0

Das meinte ich auch mit meinem Kommentar zu seiner Frage, er muss deutlicher spezifizieren, was er will. Wenn er davon spricht, ein Produkt mit einem Satz von SQL-Anweisungen zu schreiben, die für alle Datenbank-Engines identisch sind, benötigt er einen Code dazwischen, der die Unterschiede behandelt. Aber wenn er nur "Parameterparameter umgehen" bedeutet, bei denen "Parameter" nicht wirklich Parameter sind, dann ist das anders. –