Cos'è un'iniezione SQL? [MakeUseOf Explains]

Cos'è un'iniezione SQL? [MakeUseOf Explains] / Cultura Web

Il mondo della sicurezza di Internet è afflitto da porte aperte, backdoor, buchi di sicurezza, Trojan, worm, vulnerabilità dei firewall e una manciata di altri problemi che ci tengono tutti in punta di piedi ogni giorno. Per gli utenti privati, virus e worm sembrano essere la peggiore delle possibilità. Ma per chiunque stia eseguendo un database, l'iniezione SQL è uno dei difetti di sicurezza più distruttivi.

I database sono estremamente preziosi nel regno dei computer. Sono essenziali per la memorizzazione dei dati come memoria e per mostrare le varie relazioni tra i punti di dati. Qui a MakeUseOf, abbiamo numerosi database dedicati a vari compiti: uno per tutti i nostri articoli, uno per la nostra base di utenti, uno per il nostro programma Rewards e la lista continua. Cosa succede quando i nostri database vengono malintenzionati o addirittura distrutti?

Quando non si ha accesso effettivo a un database, l'iniezione SQL è una delle forme di attacco più importanti. Continua a leggere per imparare cosa è esattamente e come può essere così pericoloso.

Che cos'è SQL, comunque?

Per comprendere l'iniezione SQL, devi prima capire che cos'è SQL e come si riferisce a un sito web. SQL, che sta per Structured Query Language, è un tipo di linguaggio di programmazione ottimizzato per la gestione dei dati tabulari. A tutti gli effetti, è solo un modo per i programmatori di comunicare con un database e dargli dei comandi.

Ogni volta che viene utilizzato un database, vengono impartiti ed elaborati i comandi SQL. Se pensate a tutte le volte in cui viene eseguito un database, concludete che accade solo in una serie di circostanze:

  • Quando devono essere inseriti nuovi dati,
  • Quando i dati attuali devono essere cambiati,
  • Quando i vecchi dati devono essere cancellati,
  • Quando una determinata parte di dati deve essere cercata e recuperata.

Ogni volta che si verifica una di queste azioni, un comando SQL viene eseguito da qualche parte su un server. Per la maggior parte, il programmatore può determinare quando e dove questi comandi SQL si verificano nel codice sorgente. Tuttavia, ci sono circostanze inevitabili quando un utente può forzare una manipolazione di un database - e quelle opportunità sono tutte intorno a te.

Hai mai effettuato l'accesso a un sito Web? Hai mai pubblicato un commento su un articolo del blog o una risposta in un thread del forum? Hai mai inviato un messaggio di Facebook ad un amico? Hai digitato un'email in Gmail? Hai cercato un sito web su Google? Ogni volta che vedi un campo di inserimento su un sito web (nome utente, password, query di ricerca, messaggio, ecc.), Quel testo viene inviato al database e applicato.

Ora, se un utente malintenzionato voleva manomettere un database, non ci sono molte scelte per lui. Una possibilità sarebbe quella di ottenere reale fisico accedere al server e distruggerlo alla sua base. Altrimenti, ha più senso per l'utente malintenzionato dirottare un comando SQL esistente quando si utilizza un campo di input, forzando così il server a eseguire un comando diverso da quello che era stato originariamente inteso.

La tecnica di iniezione SQL

Questo atto di dirottamento di un comando SQL esistente è a cosa si riferisce l'iniezione SQL. Perché si chiama iniezione? Perché il dirottamento di un comando SQL richiede all'utente di iniettare il proprio codice SQL quando utilizza un campo di input. Suona confuso? Lasciatemi illustrare con un esempio.

Prendi in considerazione la pagina di accesso di MakeUseOf. Quando inserisci nome utente e password e premi “Sottoscrivi“, stai costringendo il server web a generare un comando SQL che include le informazioni che hai appena dato, cioè il tuo nome utente e la password. Il database riceve le informazioni, verifica che la combinazione nome utente / password sia corretta, quindi fornisce l'accesso corretto ad altre aree del sito.

Ora immagina cosa succederebbe se un utente malintenzionato non inserisse il suo nome utente e la sua password, ma invece digitasse un comando SQL come suo nome utente? Se il codice del server non è protetto correttamente, il database riceverà il nome utente difettoso (che in realtà è un comando SQL) e lo eseguirà come comando.

Ed è per questo che si chiama iniezione. Il comando SQL viene iniettato nel database con mezzi del tutto legittimi, manipolandolo in modo tale che finisca per fare qualcosa che non era destinato a fare.

Un esempio avanzato

Fino ad ora, ho descritto l'iniezione SQL in termini di alto livello in modo che chiunque possa capire, anche quelli senza conoscenze di programmazione. In questa sezione, darò un esempio reale di Come questa tecnica è possibile. Se sei un principiante di SQL, o se non hai mai avuto a che fare con la programmazione prima, puoi tranquillamente saltare questa sezione.

Quando si accede a un sito Web, ecco un possibile modo in cui il codice potrebbe essere scritto in SQL:

SELEZIONA id_utente
DA users_db
WHERE username = "$ username" AND password = "$ password"

Fondamentalmente, il comando chiede al database di restituire tutto user_ids dal tavolo users_db che corrisponde alla combinazione di nome utente e password immessi. Sembra tutto bello e dandy, giusto?

Supponiamo che al modulo di login siano stati forniti i seguenti input:

Nome utente: David
Password: fubar 'OR' x '=' x

Si noti che il campo della password non inizia né termina con un apostrofo. Quando il server riceve questo tentativo di accesso, prenderà tutto quanto indicato nel campo della password e lo metterà al posto della password $ nel codice. Il comando SQL risultante sarà simile al seguente:

SELEZIONA id_utente
DA users_db
WHERE username = "David" AND password = 'fubar 'OR' x '=' x'

Quando il server esegue questo comando, verrà eseguita l'ultima parte di tale comando SQL sempre ritorna vero Ciò significa che l'utente malintenzionato potrebbe inserire qualsiasi nome utente e accedere istantaneamente a tale account perché l'accesso funzionerà indipendentemente dal fatto che abbia ottenuto o meno la password corretta.

Naturalmente, l'accesso all'account di qualcuno è un reato piuttosto lieve quando lo si confronta con tutti gli altri tentativi di hacking: eliminazione di interi database, caricamento di tutti i dati o persino furto i dati nei database.

Gli sviluppatori web professionisti stanno migliorando sempre di più per prevenire questi trucchi, ma di tanto in tanto sentirai dire che un'azienda ha subito perdite a causa di un attacco SQL injection. Quando succede, ora sai cosa significa e come è possibile.

Immagine di credito: Immagine introduttiva Via Shutterstock, schema del database Via Shutterstock, HACKED Via Shutterstock