Java-Äquivalent für PHPs mysql_real_escape_string ()

Gibt es ein Java-Äquivalent zu PHP mysql_real_escape_string ()?

Dies geschieht, um SQL-Injection-Versuchen zu entgehen, bevor sie an Statement.execute () übergeben werden.

Ich weiß, dass ich stattdessen PreparedStatement verwenden kann, aber nehmen wir an, dass dies One-Shot-Anweisungen sindgeringere Leistung. Ich habe den Code bereits geändert, um PreparedStatement zu verwenden, aber angesichts der Struktur des vorhandenen Codes würde eine escape () -Funktion die Überprüfung und Pflege der Codeänderungen erheblich vereinfachen. Ich bevorzuge einfach zu pflegenden Code, es sei denn, es gibt einen zwingenden Grund für die zusätzliche Komplexität. Außerdem werden PreparedStatements von der Datenbank unterschiedlich gehandhabt. Dies kann dazu führen, dass Fehler in der Datenbank auftreten, auf die wir zuvor noch nicht gestoßen sind, sodass vor der Freigabe für die Produktion weitere Tests erforderlich sind.

Apache StringEscapeUtils escapeSQL () nur entgeht einfache Anführungszeichen.

Nachtrag: Es gibt viele Feinheiten in der Umgebung, die ich geerbt habe und die ich in meiner Frage bewusst vermieden habe.

Zwei Punkte zu beachten:

1) Vorbereitete Anweisungen sind kein Allheilmittel und bieten keinen 100% igen Schutz vor SQL-Injection. Einige Datenbanktreiber instanziieren parametrisierte Abfragen mithilfe unsicherer Zeichenfolgenverkettung, anstatt die Abfrage in ein binäres Formular vorzukompilieren. Wenn Ihr SQL-Code auf gespeicherten Prozeduren basiert, müssen Sie außerdem sicherstellen, dass die gespeicherten Prozeduren selbst keine Abfragen auf unsichere Weise erstellen.

2) Die meisten vorbereiteten Anweisungsimplementierungen binden die Anweisung an die Datenbankverbindung, über die die Anweisung instanziiert wurde. Wenn Sie das Datenbankverbindungspooling verwenden, müssen Sie vorsichtig sein
Verwenden Sie die vorbereitete Anweisungsreferenz nur für die Verbindung, für die sie vorbereitet wurde. Einige Pooling-Mechanismen setzen dies transparent um. Andernfalls könnten Sie auch die vorbereiteten Anweisungen bündeln oder (am einfachsten, aber mit mehr Aufwand) für jede Abfrage eine neue vorbereitete Anweisung erstellen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage