Gibt es in Java eine Klasse oder eine Methode, die prüft, ob eine Zeichenfolge ein SQL Server-Schlüsselwort ist?

Ich möchte etwas, das überprüfen kann, ob eine Zeichenfolge "SELECT", "INSERT" usw. ist. Ich bin nur neugierig, ob das existiert.

1

4 Antworten

Einfach genug, um hinzuzufügen:

    HashSet  sqlKeywords    =
     new HashSet(Arrays.asList(
       new String[] { ... cut and paste a list of sql keywords here ..  }));
4
hinzugefügt

Wenn Sie versuchen, die SQL-Injektion zu verhindern, sollten Sie besser die integrierten Funktionen von JDBC nutzen, z. B. vorbereitete Anweisungen. Im Allgemeinen ist die Verwendung der Verkettung von Strings zur Bildung der SQL-Anweisung gefährlich. Von Verhindern der SQL-Injektion in Java :

Prepared Statements:

String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
3
hinzugefügt

DatabaseMetaData.getSQLKeywords wird die Datenbanken Schlüsselwörter zurück, die nicht in SQL-2003 ist (SQL-2003-Schlüsselwort kann in dem Standard zu finden). Es gibt andere Methoden innerhalb dieser Schnittstelle, um verschiedene Arten von Funktionsnamen und Ähnliches zu erhalten.

Wie Chase Seibert erwähnt, glaube nicht, dass dies eine effektive Möglichkeit ist, SQL-Injection-Angriffe zu blockieren.

1
hinzugefügt

warum nicht mit dies gespeichert procedure und modifiziere es an deine Bedürfnisse, wandle es möglicherweise sogar in Java um, indem du die hashmap wie von Steve vorgeschlagen verwendest.

Persönlich mag ich die Idee einer gespeicherten Prozedur, weil verschiedene Datenbanken unterschiedliche Schlüsselwörter haben können, also scheint es elegant zu sein, die Datenbank zu beurteilen

1
hinzugefügt