Mi chiedevo se fosse comunque necessario specificare i nomi di colonna restituiti utilizzando le istruzioni preparate.Nomi di colonne variabili utilizzando istruzioni preparate
Sto usando MySQL e Java.
quando provo è:
String columnNames="d,e,f"; //Actually from the user...
String name = "some_table"; //From user...
String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?";//...
stmt = conn.prepareStatement(query);
stmt.setString(1, columnNames);
stmt.setString(2, "x");
ricevo questo tipo di istruzione (diritto di stampa prima dell'esecuzione).
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
Mi piacerebbe vedere però:
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
So che non posso fare questo per i nomi di tabella, come discusso here, ma chiedevo se ci fosse un modo per farlo per la colonna nomi.
Se non c'è, allora dovrò solo assicurarmi di disinfettare l'input in modo che non porti a vulnerabilità di SQL injection.
Bene, l'utente non ha effettivamente bisogno di conoscere i nomi delle colonne, ma i nomi delle colonne necessari sono dedotti in base ai moduli inviati dall'utente. Questo è gestito dal lato client, però, quindi volevo vedere se esisteva un modo per garantire la sicurezza dei dati. Dovrei quindi spostare l'intero lotto sul lato server, assicurando in tal modo che i dati della colonna non siano intaccati? – KLee1
Gestirlo invece sul lato server. Non fare affari nel lato client. – BalusC
@BalusC: _ "non puoi impostare i nomi delle colonne come valori PreparedStatement" _ - questo è completamente inventato. L'uso di nomi di colonne all'interno di liste di valori di istruzioni preparate è ovviamente possibile, ma ciò non significa che dovrebbe essere usato in questo modo, è ancora un cattivo progetto. – specializt