Iniezione SQL (SQLi)
Ciao,
Grazie per aver dedicato del tempo a leggere la scrittura - up! Lo apprezzo!
Il contenuto di oggi riguarderà la comprensione di "SQL Injection"
Il contenuto è completamente basato sulle mie esperienze e conoscenze personali, interazioni con persone incredibili nello spazio App Sec e Sviluppo software e molta lettura e codifica sicura.
In questo articolo, cercherò di semplificare il contenuto nelle basi. Sono sicuro che i lettori avranno i propri pensieri e commenti, e accolgo con favore qualsiasi feedback e discussione.
Visualizzazioni/Commenti/Opinioni sono personali e non del mio passato/attuale datore di lavoro.
Impariamo insieme!
Cos'è l'iniezione SQL?
Un tipo di attacco alla sicurezza dell'applicazione in cui un attore malintenzionato inserisce codice SQL dannoso in un campo di input vulnerabile per accedere e manipolare i dati all'interno di un database. SQLi consente all'attaccante di visualizzare/modificare/eliminare i dati in un database.
Come riparare SQLi?
Non concatenare query SQL e valori di input.
Esegui sempre la convalida dell'input ( la mia opinione personale, in realtà scoraggia molte firme dannose ) e quindi segui una delle strategie sottostanti per correggere SQLi -
- Query con parametri: passa i valori di input come parametri alle istruzioni sql. Ciò si ottiene utilizzando query con parametri. Ciò impedisce l'esecuzione di input dannosi come codice SQL.
- Procedure memorizzate: è molto meglio non avere query SQL SQL all'interno del codice e spostarle in un DB tramite procedure memorizzate.
Query con parametri:
Nell'esempio di codice sottostante, il nome e il passaggio vengono passati come parametri all'istruzione sql tramite 'setString()' . È un metodo di PreparedStatement.
....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....
Nell'esempio di codice sottostante, 'name' e 'location' vengono passati come parametri alla stored procedure 'userDetails' tramite 'setString()'. È un metodo di CallableStatement. L'output viene ricevuto tramite il parametro 'output' che utilizza 'registerOutParameter'. È un altro metodo di CallableStatement.
....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....
Commenti/feedback sono sempre i benvenuti poiché cerco sempre di migliorare il contenuto e di essere migliore.
Testo della fonte: la mia esperienza in App Sec, parafrasando il contenuto di più siti Web online, strumenti Open AI, DALL-E, Developer e NLP.
Grazie!
Aggiungimi su LinkedIn

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































