Riguardo SQL Injection at Back End?

2

Ho eseguito l'accesso al database di SQL Server 2008 ed eseguito la seguente query:

select * from USER_Main_INFO_Name where userid ='' or 'x'='x'

Dopo aver eseguito la query Database ha fornito un elenco utenti totale.

Usando Burp Tool, ho eseguito SQL Injection al front end, la mia applicazione ha fornito il risultato corretto dell'errore.

La mia applicazione è strong? Come evitare SQL Injecting at Backend?

    
posta user35819 26.12.2013 - 11:02
fonte

2 risposte

4

Ciò implica che a un certo punto si stanno costruendo istruzioni SQL mediante concatenazione di stringhe che coinvolgono stringhe non attendibili. Non farlo! Usa invece istruzioni preparate (o qualche altra forma di parametrizzazione della query), poiché sono praticamente intrinsecamente immuni a SQLi.

Suppongo che intendi che il tuo frontend blocca con successo tutti gli SQLi che hai provato. Questo non significa che bloccherà tutto SQLi, ovviamente; questo dipende da quanto è accurato il test.

Tuttavia, una volta che la query raggiunge il tuo back-end (supponendo che sia il tuo DBMS), non c'è davvero alcun modo per dire quale SQL proviene da SQLi e quale SQL è legittimo. Devi davvero credere che ciò che sta arrivando sulla connessione al database sia affidabile.

Naturalmente, è saggio limitare l'impatto di tali attacchi il più possibile. Molto semplicemente, e comunemente, è possibile limitare le autorizzazioni dell'account di servizio dell'applicazione sul database solo alle azioni effettivamente eseguite. Ciò non impedisce SQLi di per sé, ma ridurrà l'impatto se ne esiste uno.

Un altro approccio possibile è quello di astrarre parte dell'SQL in un livello di accesso ai dati a cui parla il frontend, ed evitare di passare qualsiasi stringa al DBMS che non proviene dall'applicazione stessa (e alcune colonne attendibili in certe tabelle) . È molto più semplice usare solo istruzioni preparate.

    
risposta data 26.12.2013 - 11:21
fonte
3

Il modo migliore per prevenire le iniezioni SQL al front-end è usare istruzioni preparate. Se si desidera impedire agli utenti di accedere al database stesso, è possibile utilizzare gli strumenti di gestione dell'account come CREATE USER , GRANT INSERT ... , REVOKE ... che vengono spediti lungo il DBMS stesso. Se questo non soddisfa il livello di sicurezza desiderato, puoi iniziare a utilizzare i firewall del database. Un ulteriore approccio per negare agli utenti l'accesso al database consiste nell'introdurre una baseline di accesso ai dati. Una linea di base significa che si crea un protocollo di accesso che contiene tutti i punti di accesso ai quali è consentito accedere al db di destinazione. Un semplice esempio potrebbe essere:

DB-USER | IP-Address   | Source Program
----------------------------------------
admin   | 5.200.200.20 | OraDriver.exe
herby   | 192.186.2.10 | DbUtil.exe

Nel caso in cui una richiesta in entrata si discosti dalla linea di base, viene eseguita un'azione specifica come, notifica a un amministratore (comportamento come un sistema di rilevamento delle intrusioni), blocco della richiesta, ecc.

    
risposta data 26.12.2013 - 12:47
fonte

Leggi altre domande sui tag