Frage

Ich bin auf der Suche SQL-Anweisungen in Java / JDBC-Code zu überprüfen, um sicherzustellen, dass der SQL ausgeführt werden von akzeptabler Qualität ist. Weder PMD nicht Findbugs erscheint JDBC oder SQL-Regeln zu haben. Ich kann p6spy verwenden, um die SQL anmelden und auf diese Weise zu sehen, aber das ist manuell.

Ich frage mich, ob die Strategie der Verwendung von PMD / Findbugs / etc eine Regel zu erstellen, die eine beliebige Zeichenfolge zu PreparedStatement geleitet, wo es ein „=“ oder „in“ ist nur Vars auf der Vergleichsseite parametrisiert.

Hat jemand getan? Oder dies getan, mit anderen Mitteln?

War es hilfreich?

Lösung

Dies ist ein heikles Problem. Vergleichsoperatoren wie = und IN() gibt einige Fälle, aber es gibt auch:. != <> < <= > >= LIKE

Wie erkennen Sie Fälle von Interpolations-Anwendungsvariablen als Literale in Ausdrücken?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

Sie können SQL-Code enthält String-Trennzeichen suchen, aber SQL-Injection kommt nicht nur aus Stringliterale interpoliert werden.

Wie Sie Fälle von Interpolations-Anwendungsvariablen wie andere Dinge als Datenwerte erkennen würde?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

Ich kenne keine automatische Weise SQL-Injection-Schwachstellen zu erkennen. Code-Review ist ein effektiver Weg, um sie zu erkennen. In jeder SQL-Anweisung, die interpolierte Anwendung Variablen enthält, müssen Sie bestätigen, dass die Anwendungsvariablen „sicher“ sind und dass Ihre App hat sie ausdrücklich bestätigt oder sie transformiert, so dass sie gefährliche Nutzlast nicht enthalten.

Andere Tipps

Haben Sie die Möglichkeit, die Anwendung mit einem Debugger mit ihm verbunden, um vollständig zu testen?

Setzen Sie einen Haltepunkt in Ihrem JDBC-Treiber-Implementierung von Connection.createStatement () und die App laufen ... (oder wenn ein Treiber für die Sie einen falschen Treiber nicht Quellcode haben, schreiben, die nur die Delegierten ruft die wirkliche, und melden Sie sich alle Instanzen von create ())

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top