Introduzione a SQL injection
- SQL injection è una vulnerabilità o una tecnica che potrebbe distruggere il database di un sito Web o di un'applicazione Web. È uno degli attacchi basati sul Web più utilizzati.
- L'obiettivo principale di un'iniezione SQL è ottenere l'accesso al database di un sito Web. Quindi, affinché un'iniezione SQL funzioni, è necessaria un'applicazione Web connessa a un database.
- Poiché il database contiene tutti i dati inclusa la password dell'amministratore, ovvero la password di accesso del proprietario, l'autore dell'attacco del sito Web può accedere alla pagina di amministrazione per modificare il sito Web compilando un modulo Web.
- Il modulo web include nome utente e password. Quando l'utente inserisce qualcosa nel campo di input del modulo Web, la query SQL SELECT è implementato nel database.
- Il sistema cerca di far corrispondere gli input cioè il nome utente e la password inseriti dall'utente con il nome utente e la password che sono già memorizzati nel database. Se entrambi gli input corrispondono, l'utente ottiene l'accesso, altrimenti l'accesso verrà negato all'utente.
- Ci sono alcuni siti Web che non dispongono del meccanismo per bloccare qualsiasi altro input. Tali siti Web sono vulnerabili all'iniezione di SQL. In questo caso, qualsiasi query SQL può essere alimentata come input e il sistema la eseguirà.
- Ad esempio, l'attaccante può inserire una query per scaricare l'intero database, eliminare il database, modificare il database e rendere la condizione sempre vera. Se una condizione di password è sempre vera, non importa se viene inserita una password. Per la password, il sistema accede a quelle memorizzate nel database, ma se viene eseguita una richiesta per eliminare la tabella delle password nel database, il sistema inizierà a prendere qualsiasi password. In questo modo, l'attaccante può accedere facilmente al database. Ora può conoscere tutte le password delle persone loggate nel sito, le varie tabelle e i loro contenuti, la struttura interna del sito e ogni altra informazione relativa al sito.
- Questo metodo è chiamato SQL injection in cui si inserisce una query nel database per manipolarla e ottenere l'accesso non autorizzato. Questo è il tipo più pericoloso di attacco al sito Web per un database basato su SQL.
- Un modo per prevenire tali attacchi è bloccare gli input non necessari diversi da nomi utente e password.
- I comandi SQL injection vengono eseguiti in fase di esecuzione. Quindi evita i comandi di input dinamici. Impedisci il database con web application firewall . Inoltre, non rivelare a nessuno alcuna informazione riservata relativa al sito web.
- I siti Web possono subire enormi perdite di dati e finanziarie a causa di tali attacchi SQL.
Esempio:
Supponiamo , esiste un'applicazione web con un database collegato ad essa. Questa applicazione Web potrebbe ricevere input dall'utente e archiviare le informazioni nel database o recuperare i dati dal database e visualizzarli all'utente.
In entrambi i casi, è presente una query SQL o una query di database che viene generata sull'applicazione Web che viene inviata al database e questa query viene eseguita sul database e le informazioni pertinenti vengono restituite all'applicazione Web. Ecco come funziona lo scenario normale.
Quindi, quando l'attaccante usa SQL injection, cerca di manipolare questa query del database per fargli fare qualcosa che idealmente non dovrebbe fare. Quindi, l'attaccante modifica la query SQL, la manipola, inserisce una stringa dannosa nella query SQL e quindi gli fa fare qualcosa in modo non autorizzato. Quindi ora la query del database viene manipolata dall'attaccante, quindi questa query dannosa viene inviata al database, viene eseguita lì e vengono restituiti i risultati pertinenti.
Questo è noto come SQL injection. SQL injection è una tecnica di code injection utilizzata per eseguire istruzioni SQL dannose e dinamiche. Gli attacchi SQL sono qualcosa che l'attaccante usa per assumere il controllo sui server di database.
Come prevenire l'iniezione SQL
- Evita di usare SQL dinamico
Gli input forniti dall'utente non devono essere inseriti direttamente nella query SQL che verrà utilizzata sul database. Invece di utilizzare l'SQL dinamico, si dovrebbero utilizzare procedure memorizzate, istruzioni preparate e query parametrizzate in quanto sono più sicure rispetto alle query SQL dinamiche.
- Gli input forniti dall'utente devono essere disinfettati
Il tipo di dati che verranno forniti dall'utente dovrà essere opportunamente abbinato e verificato con il tipo previsto.
- I dati sensibili non devono essere in chiaro
Prima di archiviare i dati riservati come le password nel database, è necessario crittografarli correttamente con hash. Il salting deve essere applicato agli hash crittografati per fornire un ulteriore livello di sicurezza ai dati riservati.
- Gli errori del database non devono essere visualizzati direttamente dall'utente
Le informazioni sull'errore visualizzate dall'attaccante potrebbero aiutarlo a ottenere informazioni sul database.