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:
// 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");
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!