Iniezione / SQL Injection Attack in Layman Terms

1

Ho difficoltà a capire quali sono gli attacchi SQL injection o, in termini più generali, quali sono gli attacchi di iniezione. La maggior parte delle spiegazioni là fuori sugli internet sono piuttosto difficili da capire. Qualcuno potrebbe spiegare, in parole povere, che cos'è un attacco di iniezione, e in particolare un'iniezione SQL? Inoltre, quali sono i modi per difendersi da questi?

Grazie

    
posta APCoding 04.10.2015 - 04:08
fonte

2 risposte

3

In parole semplici:

Le tipiche applicazioni web sono a tre livelli (browser + server web + database di back-end). Quando un utente accede a un sito Web, il suo browser riceve html e js che sono prodotti da pagine Web statiche e generati dinamicamente utilizzando il codice lato server (ad es. Php, asp). Quando si effettua l'accesso, per istanze, si invia la password e il nome utente al server Web, che elabora tali parametri e applica la logica di autenticazione pre-programmata (in php, asp). Poiché la logica richiede verifiche utilizzando un database che memorizza i dati degli utenti e consente la semplice verifica: username corrisponde alla password. Quindi, la logica lato server prende i tuoi argomenti e interroga il database (ad esempio MySQL).

SELECT * FROM Users WHERE username='your_supplied_username' AND password='your_supplied_password';

Il database lo elabora e restituisce (se il database è progettato correttamente) solo una corrispondenza (nome utente e password corrisponde) o zero (password errata) che "rappresentano te".

Che dire di SQL Injection Bro?

Non sono il tuo fratello, fratello: P. Uno sviluppatore sciatto prenderà i parametri inviati da te e li inserirà direttamente nei campi your_supplied_ *. Se l'utente non fosse malizioso, questo non sarebbe affatto un problema. Eppure, per un malintenzionato, questo apre una porta enorme per gli attacchi. Se hai familiarità con SQL, sai che E richiede che entrambe le espressioni sinistra e destra valgano per essere vere. Inoltre, in SQLi, il carattere di commento "-" è un utile amico, quindi, cosa succede se scrivo my_username '; -?

SELECT * FROM Users WHERE username='your_supplied_username';--' AND password='your_supplied_password';

Il codice lato server prenderà il mio input, lo applicheremo alla query con stringhe e lo invierò al database. Il database interpreterà "-" come un commento che escluderà:

' AND password='your_supplied_password';

pur mantenendo:

SELECT * FROM Users WHERE username='your_supplied_username'

Questa è una query valida che sarà facilmente valutata come vera. Ora, il comportamento qui varia. Se il nome utente è univoco (in genere lo è), verrà restituito un solo record. In caso contrario, verranno restituiti più record e il codice del server Web (ad es. Php) in genere selezionerà il primo. Se hai familiarità con SQL, ora puoi ottenere query creative e concatenate, utilizzare i caratteri jolly e scatenarti. Ora la domanda è:

Come sviluppatore, cosa posso fare?

Ora, questo dipende dal linguaggio lato server che si sta usando, ma le primitive di codifica sono tipicamente identiche allo stesso modo. Puoi sfuggire a sequenze speciali usando php ( link ) o utilizzare istruzioni preparate ( link ).

Come faccio a sapere se il server soffre di SQLi? È possibile eseguire strumenti come SQLMap o SQLNinja. Puoi anche andare ai moduli e scrivere

'gibberish dove si spera che si confonda il parser di query php e si verifichi un errore mostrato nel browser (errore dell'istruzione SQL). Esistono altre tecniche come l'iniezione di un'istruzione di sospensione nelle query per verificare se il database si blocca per alcuni secondi prima di tornare. Come meccanismo di difesa, dovresti sempre elaborare i tuoi errori SQL sul codice lato server prima di inviarli all'utente per evitare fughe di notizie.

Stai al sicuro;)

    
risposta data 04.10.2015 - 11:57
fonte
0

Gli attacchi SQL injection sono essenzialmente un modo per un utente malintenzionato di ottenere l'accesso ai contenuti di un database sfruttando vulnerabilità o errate configurazioni nel modo in cui l'applicazione gestisce determinate stringhe di caratteri (in particolare caratteri di escape delle stringhe).

Il modo più semplice che posso immaginare per descriverlo è che hai un modulo web che richiede l'input dell'utente per completare un sondaggio. In circostanze normali, l'utente inserirà le sue informazioni nel modulo e lo invierà. Tuttavia, se l'applicazione Web non disinfetta correttamente l'input rimuovendo determinati caratteri speciali, un utente malintenzionato, invece di digitare i dati previsti, può immettere un comando che è un comando SQL per estrarre i dati. Esistono alcuni esempi di metodi e tecniche di iniezione SQL di uso comune disponibili su link

Esistono diversi modi per mitigare il danno che può causare un'iniezione SQL. L'ingresso di disinfezione può impedire a un utente malintenzionato di immettere caratteri speciali necessari per l'esecuzione dei comandi SQL e limitare i privilegi dell'account del database Web può impedire che i dati vengano raccolti da un'iniezione SQL.

    
risposta data 04.10.2015 - 06:16
fonte

Leggi altre domande sui tag