Qual è il significato del comando "qualcosa AND 1 = 0" in SQL?

7

Ho letto da qualche parte che in SQL injection gli aggressori usano queste parole chiave nei punti di ingresso delle applicazioni. Qual è lo scopo di questo?

    
posta Anandu M Das 25.09.2014 - 11:58
fonte

2 risposte

20

Il frammento AND 1=0 viene sempre valutato a false e pertanto la query restituisce sempre un set vuoto, ad es. se il frammento SQL nell'applicazione è

SELECT * FROM users WHERE username = '<placeholder>'

quindi posso trasformare questa query in

SELECT * FROM users WHERE username = 'admin' AND 1=0 --'

quando si utilizza admin' AND 1=0 -- come valore per il segnaposto.

Ora posso inserire una seconda istruzione che viene eseguita al posto di quella desiderata, ad es.

SELECT * FROM users WHERE username = 'admin' AND 1=0; TRUNCATE TABLE users; --'

Qui svuoterò la tabella users come attacco.

Un'altra cosa utilizzata è OR 1=1 che viene sempre valutata a true . Questo è usato per interrogare un'intera tabella ed eliminare completamente il where-caluse, ad es.

SELECT * FROM users WHERE username = 'admin' OR 1=1 --'

Ciò si ottiene utilizzando admin' OR 1=1 -- come segnaposto nell'esempio sopra.

In questo caso verrà restituita la tabella completa users .

    
risposta data 25.09.2014 - 12:08
fonte
6

1=0 è sempre falso, quindi anche una clausola contenente AND 1=0 sarà sempre falsa. Questo, come il sempre vero OR 1=1 , può essere usato per ignorare le condizioni in una clausola WHERE .

La variante OR 1=1 è più generalmente utile (ad esempio SELECT username WHERE userid=173 per ottenere il tuo nome utente diventa SELECT username WHERE userid=173 OR 1=1 per ottenere ogni nome utente sul sistema), ma la variante AND 1=0 può, ad esempio, essere utilizzata per ignorare un controllo "è già registrato".

    
risposta data 25.09.2014 - 12:07
fonte

Leggi altre domande sui tag