2009-07-09 2 views
3

Ich benötige eine komplette Liste der Zeichen, die in den sql Zeichenfolgenparametern maskiert werden sollten, um Ausnahmen zu verhindern. Ich gehe davon aus, dass ich alle fehlerhaften Zeichen durch die maskierte Version ersetzen muss, bevor ich sie an meinen Filterparameter ObjectDataSource übergebe.Welche Zeichen sollten in den sql Zeichenfolgenparametern maskiert sein

+5

Warum verwenden Sie parametrisiertes SQL nicht mit Bind-Variablen? Wenn Sie Bind-Variablen verwenden, müssen Sie nie etwas entkommen. –

+0

Ich habe mich entschieden, kein parametrisiertes SQL mit Bindevariablen zu verwenden, da ich eine variable Anzahl von Parametern habe. – Slim

+1

Gibt es keine Parametersammlung? Es ist großartig für eine variable Anzahl von Parametern. –

Antwort

3

Nein, die ObjectDataSource verarbeitet alle für Sie ausgehenden Daten. Für jede parametrisierte Abfrage ist auch kein Escaping erforderlich.

+0

Dies ist keine Ja oder Nein Frage bro – Slim

+0

Es ist in gewissem Umfang. Du hast gesagt "Ich gehe davon aus, dass ich alle anstößigen Charaktere ersetzen muss" und das ist nicht wahr. Wenn Sie keine anstößigen Zeichen ersetzen müssen, benötigen Sie auch keine Liste. –

+0

Sie sagen also, dass es nicht meine Annahme ist? – Slim

0

SQL Books online: Suche nach Zeichenfolgenliteralen:

Zeichenfolgenliteralen

Ein Stringliteral besteht aus null oder mehr Zeichen von Anführungszeichen umgeben. Wenn eine Zeichenfolge Anführungszeichen enthält, müssen diese mit Escapezeichen versehen werden, damit der Ausdruck analysiert werden kann. Jedes Zwei-Byte-Zeichen außer \ x0000 ist in einer Zeichenfolge zulässig, da das Zeichen \ x0000 der Nullabschlusszeichenfolge einer Zeichenfolge ist.

Strings können andere Zeichen enthalten, die eine Escape-Sequenz erfordern. In der folgenden Tabelle sind Escape-Sequenzen für Zeichenfolgenliterale aufgeführt.

\ a Benachrichtigungs

\ b Rück

\ f Seitenvorschub

\ n Neue Zeile

\ r Carriage Rück

\ t Horizont tal Registerkarte

\ v Vertikale Registerkarte

\“ Anführungszeichen

\ Aufkantung

\ xHHHH Unicode-Zeichen in hexadezimale Schreibweise

+0

Ich suche nach einer Liste von Zeichen, die eine Fehlfunktion der SQL-Zeichenfolge verursachen. All dies scheint SQL-string-freundlich zu sein. – Slim

+0

In Bezug auf meinen letzten Kommentar. Einige der Zeichen werden für SQL-Injection-Angriffe verwendet, aber da es fraglich ist, ob Sie tatsächlich eine durch eine ObjectDataSource FilterExpression erreichen können, mache ich mir keine Sorgen um sie. – Slim

1

Wie andere haben darauf hingewiesen, in In 99% der Fälle, in denen jemand denkt, dass sie diese Frage stellen müssen, tun sie es falsch. Parametrisierung ist der Weg zu gehen. Wenn Sie wirklich selbst flüchten müssen, versuchen Sie herauszufinden, ob Ihre DB-Zugriffsbibliothek eine Funktion dafür bietet (z. B. hat MySQL mysql_real_escape_string).

+0

In diesem Fall liegen die anderen falsch. Ich versuche zu filtern nicht auswählen. Es berührt niemals die Datenbank, so dass keine Gefahr eines Injektionsangriffs besteht. Auch eine ObjectDataSource bietet keine parametrisierten Filterausdrücke. Es bietet nur Platzhalter. – Slim

0

Hier ist ein Weg, wie ich Apostrophe loszuwerden. Sie könnten dasselbe mit anderen anstößigen Charakteren machen, denen Sie begegnen. (Beispiel in VB.Net)

Dim companyFilter = Trim(Me.ddCompany.SelectedValue) 

If (Me.ddCompany.SelectedIndex > 0) Then 
     filterString += String.Format("LegalName like '{0}'", companyFilter.Replace("'", "''")) 
End If 

Me.objectDataSource.FilterExpression = filterString 

Me.displayGrid.DataBind()