Heim > Java > javaLernprogramm > Können vorbereitete Anweisungen in Java variable Spaltennamen in MySQL sicher verarbeiten?

Können vorbereitete Anweisungen in Java variable Spaltennamen in MySQL sicher verarbeiten?

Susan Sarandon
Freigeben: 2024-12-06 20:09:12
Original
239 Leute haben es durchsucht

Can Prepared Statements in Java Handle Variable Column Names Securely in MySQL?

Variable Spaltennamen mithilfe vorbereiteter Anweisungen

Problem:

Können variable Spaltennamen angegeben werden bei Verwendung vorbereiteter Anweisungen in MySQL mit Java, um SQL-Injection zu verhindern Schwachstellen?

Erklärung:

Vorbereitete Anweisungen sollen vor SQL-Injection schützen, indem sie die Abfrageparameter von der Hauptabfrageanweisung trennen. Beim Versuch, vorbereitete Anweisungen zu verwenden, werden die Spaltennamen nicht als Parameter erkannt, sondern stattdessen als Literalwerte in die Abfrage interpoliert. Dies kann zu Sicherheitsproblemen führen, wenn die bereitgestellten Spaltennamen nicht ordnungsgemäß bereinigt werden.

Lösung:

  • Dynamische Spaltennamen vermeiden: Es wird empfohlen, das Datenbankschema neu zu gestalten, um die Notwendigkeit benutzerspezifischer Spaltennamen zu beseitigen. Erwägen Sie stattdessen, eine separate Spalte zu erstellen, um die gewünschten Spaltennamen zu speichern und sie in die Abfrage einzubeziehen.
  • Manuelle Abfrageerstellung und -bereinigung: Wenn dynamische Spaltennamen unvermeidbar sind, müssen Sie dies tun Erstellen Sie die SQL-Abfragezeichenfolge selbst. Verwenden Sie die Methode String#replace(), um alle eingebetteten Anführungszeichen in den Spaltennamen zu maskieren und so eine SQL-Injection zu verhindern. Zum Beispiel:
// Sanitize the user-provided column names
String sanitizedColumns = columnNames.replace("'", "\'");

// Build the SQL query string
String query = "SELECT a,b,c,ROW_NUMBER() OVER(), " + sanitizedColumns + " FROM " + name + " WHERE d=?";

// Prepare the statement
stmt = conn.prepareStatement(query);
stmt.setString(1, "x");
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonKönnen vorbereitete Anweisungen in Java variable Spaltennamen in MySQL sicher verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage