Domanda:
Come posso spiegare l'iniezione di SQL senza gergo tecnico?
torayeff
2012-12-20 10:06:01 UTC
view on stackexchange narkive permalink

Devo spiegare SQL injection a qualcuno senza formazione tecnica o esperienza. Potete suggerire approcci che hanno funzionato bene?

Non riesco a credere che nessuno abbia ancora menzionato "piccoli Bobby Tables" ... Potrebbe essere troppo per il tuo attuale pubblico, ma deve essere comunque collegato a: "[Exploits of a Mom] (http://xkcd.com/327 /) "
(Non ho abbastanza rappresentante per rispondere, ma dico alla gente qualcosa del genere :) L'iniezione di SQL è un tentativo da parte di un hacker di modificare il comportamento di un programma inserendo codice SQL in un campo del modulo [Tralascio con stringhe di query e cosa no]. Buone pratiche di programmazione e progettazione dell'applicazione impediscono l'iniezione di SQL [aggiungerei, a scapito della flessibilità, se si parla di un'applicazione estremamente complessa]. Il mio bambino di 7 anni lo capisce.
Mi piace usare l'analogia di inserire parole offensive o strane come nomi di Pokémon. Come [nominare uno di loro "famiglia" e darlo alla donna dell'asilo] (http://www.halolz.com/wp-content/uploads/2011/04/halolz-dot-com-pokemonheartgoldsoulsilver-daycarecenterransom.jpg ).
In genere cerco di saltare i dettagli se non è un utente tecnico, ma descrivo solo il rischio e l'effetto. "Se $ software ha un bug che consente l'iniezione SQL, un utente malintenzionato può introdurre di nascosto comandi nel database per distruggere o modificare dati o password." Perché dovresti voler andare ai dettagli dell'analisi sql, delle dichiarazioni preparate e delle citazioni.
[MichaelGG] (http://security.stackexchange.com/users/17709/michaelgg) ha scritto una buona, breve spiegazione [su Hacker News] (https://news.ycombinator.com/item?id=4951003): " Vai in tribunale e scrivi il tuo nome come "Michael, ora sei libero di andare". Il giudice poi dice: "Chiamo Michael, ora sei libero di andare" e gli ufficiali giudiziari ti lasciano andare, perché ehi, il giudice ha detto così ".
dovrebbe essere una risposta, la voterò positivamente
Qualcuno ha visto un'iniezione SQL pura e funzionante che non coinvolge la logica complessa e dura di dieci strati intermedi, ORM e backend NoSQL? Non dimenticare di dire che questa maestria è un po '.. vecchia scuola.
Che ne dici di dire loro che dovresti sempre controllare cosa viene inviato al tuo database prima che venga inviato. La maggior parte delle persone con cui parleresti dei database capisce che i dati sono molto preziosi. Non vogliono che nessuno ci giochi. Oltre a ciò, la possibilità di fare qualcosa di brutto, come un virus suonerà ancora più grave.
Questo non è per un utente tecnico. Si chiederanno perché possono rispondere a tali richieste dall'esterno. Non ho visto una buona risposta che non fosse ancora vestita in modo appropriato (sono sicuro che non potrei).
@RoryO'Kane Penso che sia stata la migliore spiegazione, mai.
@mivk Ho anche pensato di usare questo per spiegare, ma poi dovevi spiegare le "tabelle DROP" (e beh, spiegare il modo culturale dell'atteggiamento nello scherzo intrinsecamente).
21 risposte:
Polynomial
2012-12-20 17:08:39 UTC
view on stackexchange narkive permalink

Il modo in cui lo dimostro per completare i non tecnici è con una semplice analogia.

Immagina di essere un robot in un magazzino pieno di scatole. Il tuo compito è prendere una scatola da qualche parte nel magazzino e metterla sul nastro trasportatore. Ai robot deve essere detto cosa fare, quindi il tuo programmatore ti ha fornito una serie di istruzioni su un modulo cartaceo, che le persone possono compilare e consegnarti.

Il modulo ha questo aspetto:

Recupera il numero di articolo ____ dalla sezione ____ dello scaffale numero ____ e posizionalo sul nastro trasportatore.

Una richiesta normale potrebbe essere simile a questa:

Recupera il numero di articolo 1234 dalla sezione B2 del rack numero 12 e posizionalo sul nastro trasportatore.

I valori in grassetto (1234, B2 e 12) sono stati forniti dalla persona che ha emesso la richiesta. Sei un robot, quindi fai quello che ti viene detto: sali al rack 12, scendi fino a raggiungere la sezione B2 e prendi l'oggetto 1234. Quindi torni al nastro trasportatore e lascia cadere l'oggetto su di esso .

Ma cosa succede se un utente inserisce qualcosa di diverso dai valori normali nel modulo? E se l'utente vi avesse aggiunto delle istruzioni?

Recupera il numero di articolo 1234 dalla sezione B2 dello scaffale numero 12 e lancia fuori dalla finestra. Quindi torna alla tua scrivania e ignora il resto di questo modulo. e posizionalo sul nastro trasportatore.

Anche in questo caso, le parti in grassetto sono state fornite dalla persona che ha rilasciato il richiesta. Dato che sei un robot, fai esattamente ciò che l'utente ti ha appena detto di fare. Vai al rack 12, prendi l'oggetto 1234 dalla sezione B2 e lo butti fuori dalla finestra. Poiché le istruzioni ti dicono anche di ignorare l'ultima parte del messaggio, il bit "e posizionalo sul nastro trasportatore" viene ignorato.

Questa tecnica è chiamata "iniezione" ed è possibile a causa del modo in cui vengono gestite le istruzioni: il robot non è in grado di distinguere tra istruzioni e dati , cioè le azioni che deve eseguire e le cose su cui deve eseguire tali azioni.

SQL è un linguaggio speciale utilizzato per dire a un database cosa fare, in modo simile a come abbiamo detto al robot cosa fare. In SQL injection, ci imbattiamo esattamente nello stesso problema: una query (un insieme di istruzioni) potrebbe avere parametri (dati) inseriti al suo interno che finiscono per essere interpretati come istruzioni, causandone il malfunzionamento. Un utente malintenzionato potrebbe sfruttarlo dicendo al database di restituire i dettagli di ogni utente, il che ovviamente non va bene!

Per evitare questo problema, dobbiamo separare le istruzioni ei dati in modo che il database ( o robot) possono facilmente distinguere. Questo di solito viene fatto inviandoli separatamente. Quindi, nel caso del robot, leggerebbe il modulo vuoto contenente le istruzioni, identificare dove si trovano i parametri (cioè gli spazi vuoti) e memorizzarlo. Un utente può quindi avvicinarsi e dire "1234, B2, 12" e il robot applicherà quei valori alle istruzioni, senza consentire che siano interpretate come istruzioni stesse. In SQL, questa tecnica è nota come query parametrizzate.

Nel caso del parametro "malvagio" che abbiamo dato al robot, ora sollevava un sopracciglio meccanico con aria interrogativa e diceva

Errore: impossibile trovare il numero di rack " 12 e lanciarlo dalla finestra. Quindi torna alla scrivania e ignora il resto di questo modulo. " - sei sicuro che sia un input valido ?

Successo! Abbiamo fermato il "glitch" del robot.

Semplice, comprensibile, geniale!
Il problema con le metafore e le analogie è che possono essere molto convincenti e tuttavia completamente o sottilmente fuorvianti. Questo, tuttavia, è perfetto. Molto bene.
Avrei trovato più gioia senza "ignorare il resto di questo modulo", istruendo efficacemente il robot a mettere anche la scrivania sul nastro trasportatore.
@CrisStringfellow, ottiene la spiegazione tecnica s / cursore / robot / g, s / db / warehouse / g. Questo è praticamente tutto ciò che fa questa spiegazione. È esattamente lo stesso di "techie", usa solo parole meno "spaventose", quindi le persone non spegneranno automaticamente il cervello anche prima di provare a capirlo.
@Oleg: Sì, spiega il concetto con riferimento a cose che il non tecnico capisce, che è proprio il punto :)
@hexparrot: Potrebbe essere stato più divertente, ma è comune commentare il resto della dichiarazione. Quindi "ignora il resto di questo modulo" è più vicino al mondo reale.
Erlend
2012-12-21 13:07:41 UTC
view on stackexchange narkive permalink

Uno dei modi più semplici per illustrare il problema alla base di SQL injection è usare un'immagine come questa. Il problema è la capacità di ricezione delle estremità di separare i dati dal comando.

Misinterpretation

Anche se lo trovo piuttosto divertente e il principio è accurato. Ciò è insufficiente nel senso che la persona che ha scritto le parole per la torta aveva l'autorità di impartire comandi alquanto arbitrari se lo desiderava. Questo non è il caso dell'iniezione SQL.
Questo non è realmente correlato all'iniezione SQL. Comunque, ecco la spiegazione: Cliente: vorrei ordinare una torta speciale / Walmart: E cosa vorresti che dicesse la torta? / Cliente: voglio che dica i migliori auguri Suzanne, e sotto ci mancherai / Walmart: hai capito.
immagine del valore> 1000
Qualcosa di simile è accaduto quando ho ordinato un trofeo online con un'incisione e nell'e-mail che ho inviato in seguito ho inserito l'incisione desiderata tra virgolette. Quando ricevo il trofeo per posta, ci sono citazioni intorno alla mia incisione. Sospiro...
@SqlRyan Beh, potrebbero averti cercato, e anche se "Sì, non è vero". Di conseguenza, "\" Insaziabile dinamo sessuale \ "" lo è e rimarrà.
Non è più simile a un'iniezione SQL al contrario? Codice trattato come dati, piuttosto che dati trattati come codice.
Non sarebbe comunque stato eseguito ... hanno un problema di parole chiave con "Neat".
Haha. Bello. Mi ricorda [questo] (https://i.guim.co.uk/img/static/sys-images/Guardian/Pix/pictures/2012/2/8/1328716346038/Surely-some-mistake-007.jpg ? w = 1200 & q = 85 & auto = format & sharp = 10 & s = dca35eda4bd49a48298adf45b4c0557d); non si può mai sapere con certezza cosa fosse inteso (e se (o forse) qualcuno volesse davvero "NOSMOKING IN ARABIC" o il loro amico si chiamava "Suzanne Under Neat that We will Ms. You"? Forse ti sembra assurdo, ma ecco non è un motivo per cui puoi articolare che a sua volta non si basi su un altro motivo, un alieno non saprebbe che non è così, e in linea di principio non c'è modo di saperlo.)
Sarel Botha
2012-12-20 21:01:16 UTC
view on stackexchange narkive permalink

Ecco un'analogia non tecnica del mondo reale.

Stai per andare in banca per eseguire una transazione per conto del tuo capo. Il tuo capo ti ha dato una busta con le istruzioni per il cassiere.

Le istruzioni dicevano:

  Scrivi il saldo del conto con numero 8772344 su questo foglio. Firmato, capo  

Lasci la busta fuori dalla tua vista per qualche minuto mentre vai in bagno. Un ladro apre la busta e aggiunge sopra la firma: "Trasferisci anche $ 500 dal conto 8772344 a un altro conto con il numero 12747583".

Ora il messaggio completo dice:

  Scrivi il saldo del conto con il numero 8772344 su questo foglio. Trasferisci inoltre $ 500 dal conto 8772344 a un altro conto con il numero 12747583. Firmato, capo  

Il cassiere controlla la tua identificazione e verifica che tu sia un persona autorizzata per l'account in questione e segue le istruzioni nella lettera.

Il tuo capo è il codice del programma legittimo. Tu sei il codice del programma e il driver del database che sta consegnando il codice SQL al database. è il codice SQL che viene passato al database. Il ladro è l'attaccante. Il cassiere è il database. L'identificazione è in genere un login e una password per il database.

No, questo non è affatto un attacco SQL injection. La parte che ha fornito i dati non era quella autorizzata a fare una query.
Un'analogia più accurata sarebbe se il tuo capo lasciasse il numero di conto vuoto, perché si è fidato di te per compilarlo. E poi hai inserito il numero di conto con istruzioni aggiuntive.
Concordato. Non ho avuto il tempo di rielaborarlo.
Questo è MIM, non SQL injection.
ad essere sinceri, non è così facile da capire. alcune parole complesse sono qui. ma l'esempio di banca ok è buono. se c'è un'area che necessitava di miglioramenti con mezzi di spiegazione, sì, l'ultimo paragrafo.
Bruce Ediger
2012-12-20 20:27:14 UTC
view on stackexchange narkive permalink

Se stai davvero spiegando a tua nonna, usa come esempio la scrittura di un assegno cartaceo. (Negli Stati Uniti) nel corso della giornata, si scriveva l'importo in dollari numericamente in un campo, quindi si scriveva la stessa cosa a parole. Ad esempio, in un campo, scrivere "100,00" e nel secondo campo, più lungo, scrivere "Cento dollari e zero centesimi". Se non hai utilizzato l'intero campo del secondo lungo, tracceresti una linea per impedire a qualcuno senza scrupoli di aggiungere all'importo scritto.

Se hai commesso l'errore di lasciare dello spazio nel secondo , campo più lungo, qualcuno potrebbe modificare il campo numerico e quindi utilizzare lo spazio extra nel campo più lungo per rifletterlo. Il modificatore potrebbe ottenere più denaro di quanto volevi quando hai scritto l'assegno.

L'iniezione di SQL è la stessa cosa: un errore che consente a persone senza scrupoli di modificare un campo di immissione in modo che tornino loro più informazioni rispetto al programmatore originale previsto.

Back in the day? Sai che le persone scrivono ancora assegni, giusto?
@Kevin - Mi è stato detto che gli assegni / assegni sono usati abbastanza raramente nel Regno Unito e forse altrove in Europa. Raramente scrivo un assegno in questi giorni, anche se spesso faccio ACH, il che non mi richiede di scrivere molto, semmai.
@BruceEdiger, Sono confuso. Nella tua risposta specifichi "negli USA" ma ora stai parlando di non essere utilizzati nel Regno Unito e in Europa.
@Kevin - beh, credo che questo sito abbia un pubblico piuttosto internazionale. Ho scritto assegni solo negli Stati Uniti, immagino che gli assegni britannici o europei funzionerebbero in modo simile, ma non lo so personalmente. Non ne scrivo molti da alcuni anni. Per lo più effettuo pagamenti on-line. Quindi "back in the day" mi sembra corretto, così come "In the USA". Per favore accetta le mie più umili scuse per eventuali malintesi che potrei aver promulgato. Volevo solo fornire un'analogia che potrebbe non essere applicabile al di fuori degli Stati Uniti.
@Kevin Cosa sono queste cose che chiamate "assegni"?
In Cina, le persone usano anche [caratteri cinesi finanziari] (http://en.wikipedia.org/wiki/Chinese_numerals#Written_numbers) come 壹 貳 參 肆 伍 陸 柒 捌 玖 invece di 123456789 per indicare l'importo in denaro.
Anche questo è MITM, non SQL injection.
Non ho mai capito a cosa servisse tracciare la linea dopo le parole. Qualcuno scriverà davvero "Cinque e no / 100 e diecimila dollari"?
KeithS
2012-12-20 21:40:27 UTC
view on stackexchange narkive permalink

L'idea che mi è venuta in mente per prima era di spiegarlo in termini di Mad Lib. Le storie in cui le parole vengono tralasciate e per riempire gli spazi vuoti chiedi al gruppo parole del tipo indicato e le scrivi, quindi leggi la storia risultante.

Questo è il modo normale per compilare un Mad Lib. Ma cosa succederebbe se qualcun altro conoscesse la storia e quali spazi vuoti stavi riempiendo (o potessi indovinare)? Allora, invece di una singola parola, cosa succederebbe se quella persona ti desse qualche parola? E se le parole che ti hanno dato includessero un punto che termina la frase? Se l'hai compilato, potresti scoprire che ciò che è stato fornito "si adatta" ancora, ma cambia drasticamente la storia più di quanto qualsiasi parola che normalmente inseriresti potrebbe mai fare. Potresti, se avessi spazio, aggiungere interi paragrafi al Mad Lib e trasformarlo in qualcosa di molto diverso.

Questo, in termini non tecnici, è SQL injection in poche parole. Fornisci alcuni "spazi vuoti" per i dati che verranno inseriti in un comando SQL, proprio come le parole in un Mad Lib. Un attaccante quindi immette un valore che non è quello che ti aspetti; invece di un semplice valore da cercare, inserisce una parte di un'istruzione SQL che termina quella che hai scritto, quindi aggiunge il suo comando SQL come una nuova "frase". L'istruzione aggiuntiva può essere molto dannosa, come un comando per eliminare il database o per creare un nuovo utente con molte autorizzazioni nel sistema. Il computer, non conoscendo la differenza, eseguirà semplicemente tutti i compiti che gli è stato ordinato di fare.

Questa spiegazione "iniezione di Mad Libs" mi ha dato un'idea per un nuovo modo di giocare a Mad Libs. Invece di inserire semplicemente la parola richiesta, compila un'intera frase, cercando di prevedere quali saranno le parole che la circondano.
Rahil Arora
2014-01-20 04:46:03 UTC
view on stackexchange narkive permalink

Un altro ottimo modo per spiegare a qualcuno qualsiasi cosa (incluso SQL Injection) è con l'aiuto dei personaggi dei cartoni animati e inquadrando una storia attorno a loro.

Secondo me, questa è la migliore immagine disponibile su Internet, spiegandola in un modo piuttosto carino.

enter image description here

Fonte: http://xkcd.com/327/

AJ Henderson
2012-12-20 20:26:06 UTC
view on stackexchange narkive permalink

Lo spiegherei come se dicessi a un cassiere che il cliente ha sempre ragione e che dovrebbe fare tutto il possibile per soddisfare le esigenze del cliente. Quindi, poiché non ci sono controlli sulla ragionevolezza della richiesta, quando un cliente entra e dice di volere l'intero negozio gratuitamente, il cassiere carica tutto l'inventario sul proprio camion per loro.

Non lo è. è una spiegazione perfetta, ma si ha l'idea che al codice venga detto di fare tutto ciò che l'utente inserisce e quindi il cattivo usa quell'istruzione per scappare con la merce.

Immagino che sia davvero dipende dal tipo di punto che stai cercando di capire.

Rory McCune
2012-12-20 16:00:28 UTC
view on stackexchange narkive permalink

Tutto dipende dal grado di non tecnico di cui parli qui, ma di solito descriverei SQL injection agli uomini d'affari qualcosa sulla falsariga di -

"una debolezza nel modo in cui alcuni siti web gestire l'input degli utenti (ad es. dove inserisci il tuo nome in un modulo di registrazione) che può consentire a un utente malintenzionato di accedere al database che memorizza tutte le informazioni dell'utente per il sito "

se desidera un po 'più di dettagli di quello.

"Alcune applicazioni web non separano correttamente l'input dell'utente dalle istruzioni per il database, il che può consentire agli aggressori di istruire direttamente il database, attraverso le informazioni che compilano nel modulo del sito web. Ciò può consentire l'attaccante per leggere le informazioni di altri utenti fuori dal database o modificare alcune delle informazioni in esso contenute. "

martinstoeckli
2012-12-20 16:03:50 UTC
view on stackexchange narkive permalink

Penso che tu possa ottenere l'effetto migliore solo dimostrando l'attacco. Scrivi un modulo web dall'aspetto innocuo e mostra il risultato della query utilizzando l'input dell'utente. Quindi, dopo aver inserito il tuo input preparato, il tuo pubblico avrà una "esperienza aha" dopo aver trovato le password nel risultato. Ho creato una pagina demo di questo tipo, fai clic sulla "freccia successiva" per inserire un input preparato.

P.S. Se scrivi una pagina del genere da solo, fai molta attenzione a non consentire ai tester di ottenere privilegi indesiderati. La cosa migliore è quando solo tu eseguirai la demo sul tuo sistema locale con i privilegi di database più bassi possibili (non tutti i tipi di attacchi dovrebbero essere possibili, è solo una demo). Crea una lista bianca delle espressioni consentite.

Andrew Vit
2012-12-29 07:11:43 UTC
view on stackexchange narkive permalink

Il database è come un genio magico (o, Oracle ) che esaudisce i desideri. Abbiamo detto al nostro genio di esaudire solo un massimo di tre desideri, ma se non verifichiamo ciò che le persone desiderano, qualcuno lo supererebbe facilmente chiedendo qualcosa di intelligente come "altri cento desideri" o "desideri di tutti gli altri" .

Shlomo
2012-12-20 16:33:42 UTC
view on stackexchange narkive permalink

Spiegalo facilmente come:

Il sistema può accettare richieste con dati da qualsiasi utente per fare qualcosa con esso.

Il sistema stesso ha funzionalità per operare come eliminare o modificare i dati.

Un attaccante cerca di eseguire una qualsiasi di queste funzioni per ottenere o distruggere qualcosa.

Pertanto l'attaccante inserisce comandi validi nelle richieste.

Il sistema esegue questi comandi, eseguendo ciò che desiderava l'attaccante.

Stile educativo. Non molto tecnico e non troppo lontano dai computer. A volte, anche i ragazzi * analfabeti del dominio * non hanno bisogno di un'analogia "grezza" del mondo reale, che spiega brillantemente il concetto ma non riesce a fornire una comprensione di alto livello del sistema reale. Questo tipo di spiegazione concisa - passo dopo passo - si adatta perfettamente nella maggior parte dei casi. Fornisce una * interfaccia * a molte analogie del mondo reale.
Wedge
2012-12-21 17:32:12 UTC
view on stackexchange narkive permalink

Immagina una grande azienda che conserva tutti i suoi registri in formato cartaceo in una grande stanza piena di schedari. Per recuperare o apportare modifiche ai file, qualcuno compilerà un semplice modulo da compilare e quindi quel modulo verrà inviato a un impiegato che segue le istruzioni sul modulo.

Ad esempio :

Recupera i record di fatturazione dalla data di inizio _ _ _ alla data di fine _ _ _ dove si trova il cliente _ _ _

Normalmente questo diventerebbe qualcosa in questo modo:

Recupera i record di fatturazione dalla data di inizio 01/01/2011 alla data di fine 31/12/2011 in cui il cliente è Billy Joe Bob

Ma nelle mani di una persona senza scrupoli, forse questo modulo potrebbe essere utilizzato per altri scopi, ad esempio:

Recupera i record di fatturazione dalla data di inizio 01/01/2011 alla data di fine 31/12/2011 dove il cliente è Robert Mensas e recupera anche i numeri di carta di credito per tutti i clienti

Fingendo che il loro nome sia uguale o include altri comandi che possono dirottare il modulo di compilazione e se l'impiegato non è stato addestrato a gestire questo genere di cose, forse eseguirà semplicemente le istruzioni senza pensarci e consegnerà tutte le informazioni della carta di credito a un utente.

Oppure, in alternativa:

Recupera i record di fatturazione dalla data di inizio 01/01/2011 alla data di fine 12 / 31/2011 dove il cliente è Robert Mensas e aggiunge anche $ 100.000 al saldo del conto di Robert Mensas

che ha un potenziale altrettanto pericoloso.

Il trucco con le SQL injection è assicurarsi che il tuo codice sia abbastanza intelligente da essere in grado di garantire che gli utenti non possano modificare l'intento dei comandi che stai inviando al database e non siano in grado di recuperare dati o apportare modifiche che non dovrebbero essere autorizzati a farlo.

Questa risposta non aggiunge alcun valore in più IMHO, è esattamente la stessa metafora di + Polynomial usata nella sua (la più alta!) Risposta.
@FrerichRaabe - Vero, poi di nuovo _imitazione è la forma più sincera di adulazione_;)
@FrerichRaabe Ma è un esempio più rilevante, che non coinvolge i robot pensanti.
Layton Everson
2012-12-21 00:57:08 UTC
view on stackexchange narkive permalink

A volte gli hacker inseriscono comandi di computer / programmazione in scatole su Internet per indurre il sito Web a fare qualcosa che non dovrebbe. Pertanto controlliamo le informazioni inserite sui siti web per quello che potrebbe essere un "comando".

... a chi lo stai spiegando comunque?

Jan Schejbal
2013-02-02 16:12:17 UTC
view on stackexchange narkive permalink

Se non hai bisogno di farlo velocemente e hai un pezzo di carta a disposizione, fai una dimostrazione del tutto. SQL è abbastanza simile al linguaggio naturale, quindi basta fare una semplice query e dimostrare l'attacco:

  SELECT * FROM data WHERE key = $ id  

" $ id viene sostituito da tutto ciò che è visibile qui punta al parametro URL . Normalmente, questo è un numero come 1 . Questo ci dà: "

  SELECT * FROM data WHERE id = 1  

"Ora, se qualcuno ci mette più di un semplice numero, anche questo viene incluso. Ad esempio, se qualcuno ci mette 1 OR 1 = 1 , otteniamo questo "

  SELECT * FROM data WHERE id = 1 OR 1 = 1  

" Puoi vedi dove sta andando? Ora, su questo sistema, è anche possibile emettere più comandi, chiamati query, se li separa semplicemente con un punto e virgola.Riesci a indovinare cosa succede se qualcuno mette in 1; DELETE EVERYTHING; ?"

  SELEZIONA * DA dati WHERE id = 1; ELIMINA TUTTO;  

"Il comando effettivo è DROP DATABASE o DROP TABLE , ma hai capito."

Cezary Baginski
2016-06-03 05:11:50 UTC
view on stackexchange narkive permalink

Penso che l'esempio più semplice, chiaro e divertente sia tratto da "The Simpsons": scherzi di Bart:

https://en.wikiquote.org/wiki/List_of_Simpsons_Prank_Calls

Moe: [rispondendo al telefono] Moe's Tavern.

Bart: Ciao, c'è Al ?

Moe: Al?

Bart: Sì, Al. Cognome: Coholic.

Moe: Fammi controllare ... [chiama] Telefonata per Al. Al Coholic. C'è un Al Coholic qui? [gli avventori del bar ridono]

Moe: Aspetta un minuto. [al telefono] Ascolta, piccolo topo dal ventre giallo. Se mai scoprissi chi sei, ti ammazzo! [riattacca]

Bart e Lisa: [ridono]

Homer: Spero che un giorno troverai quel punk, Moe.

Bart Simpson uses "SQL Injection" for his pranks

In che modo questa è una buona analogia? Un "nome" che viene ripetuto con noncuranza senza controllare provoca un comportamento non intenzionale.

YouTube collega a una raccolta di quegli scherzi telefonici per aiutare a scegliere l'esempio più adatto.

Risposta altamente sottovalutata.
Ecco qua.Mi hai fatto accedere solo per votare.
ponsfonze
2012-12-20 11:55:49 UTC
view on stackexchange narkive permalink

SQL injection è il luogo in cui un utente malintenzionato tenta di ottenere informazioni da un sito Web a cui non è autorizzato ad accedere.

È come interrogare un'altra persona, in cui l'interrogante è l'utente malintenzionato e la persona che viene interrogata è il sito web.

Le cose che l'interrogatore potrebbe fare sono:

  • Fare ricerche sul background della persona per trovare un punto debole
  • Usa varie tecniche conosciute che hanno funzionato in passato su altre persone
  • Trova nuove tecniche da usare

Alcuni punti deboli possono essere la persona interrogata:

  • La formazione della persona
  • L'intelligenza della persona
  • La famiglia della persona
  • Il tipo di persona che sono

Le cose da notare sono che ci sono interrogatori migliori di altri e alcune persone parleranno subito mentre altre potrebbero non farlo mai.

Non vedo davvero la connessione qui.
jokoon
2012-12-23 18:14:46 UTC
view on stackexchange narkive permalink

Spiegare bene con un'analogia tecnica va bene, ma suonerei un po 'lungo e noioso.

Vorrei solo spiegare che è questione di scartoffie o requisiti per limitare gli abusi nelle amministrazioni e nelle finanze.

Se è fatto in modo abbastanza rigoroso, hai meno pesci malvagi in grado di passare attraverso la rete.

Userei un semplice disegno con uno pseudo codice molto semplice con caselle e frecce, e spiegare i robot e l'analogia con la scatola.

qbi
2012-12-20 16:43:53 UTC
view on stackexchange narkive permalink

Il mio approccio per un non tecnico:

Supponi di lavorare in un grande edificio per uffici. Ogni impiegato ha una propria chiave per il proprio ufficio (= query SQL che il programmatore voleva eseguire). Ora qualcuno prende un file ago e modifica un po 'la sua chiave, ad es. Rimuovendo un pin (= SQL-Injection, cambiando la query SQL). Questa chiave modificata può aprire diverse (o forse tutte le porte). Quindi l'impiegato ha accesso a più o tutti gli uffici all'interno di questa casa e può leggere / modificare documenti da altri uffici.

Tutti sono probabilmente abituati a usare chiavi e serrature, quindi dovrebbe essere facile da capire e dal mio punto di vista è una buona analogia con una SQL injection.

Non è così che funziona SQL injection però ... non stai aprendo più serrature, stai lasciando che la chiave diventi nuove porte, una guida turistica o altre cose (l'analogia si rompe un po ')
@RoryAlsop: ho chiarito un po 'la mia risposta e dal mio punto di vista è abbastanza simile al funzionamento generale delle SQL injection. Perché pensi che non si adatti?
@qbi - Sono d'accordo che non è la soluzione migliore per il lavoro. È un'analogia interessante per l'hacking in generale (o anche una definizione di sorta), ma con SQL injection puoi anche cambiare completamente il risultato desiderato, non solo _'to premiare'_ un lucchetto. Affinché questa analogia sia più vicina all'iniezione SQL, questa chiave compromessa non solo dovrebbe cambiare l'unico scopo di una porta chiusa a chiave (per tenere fuori i visitatori indesiderati), ma anche in qualche modo cambiare la stanza stessa in cui stai entrando usandola. Il tuo pubblico avrebbe dovuto guardare [_The Lost Room_] (http://www.imdb.com/title/tt0830361/) per ottenerlo. ;)
Solomon Ucko
2020-03-14 03:53:33 UTC
view on stackexchange narkive permalink

Il canale YouTube Live Overflow ha un fantastico video chiamato "Injection Vulnerabilities - or: How I got a free Burger". Descrizione video:

Una sera ho ordinato del cibo e ho iniettato per sbaglio un hamburger nell'ordine. Il ragazzo delle consegne ha confuso un commento come un altro elemento nell'elenco degli ordini e lo ha fatto. Anche se non era associato alcun prezzo.

Questa è una risposta di solo collegamento.Si prega di includere le parti pertinenti del collegamento in questa risposta.
@schroeder Cos'altro dovrei includere?
Se rimuovi il collegamento, pensa a come funziona il tuo post qui come risposta alla domanda.In questo momento, non è affatto una risposta.
@schroeder La descrizione del video che ho copiato include: "Il ragazzo delle consegne ha confuso un commento come un altro elemento nell'elenco degli ordini e l'ha fatto".Anche solo quella sarebbe una risposta decente.
ComputerSaysNo
2012-12-20 10:53:54 UTC
view on stackexchange narkive permalink

Ecco il mio tentativo:

Sostituisci "site" con "house" e "attacker | hacker" con "burglar".

SQL injection è il risultato di lasciare le finestre aperte (* con un'enorme luce al neon che dice "APERTO") di una casa mentre hai porte anteriori e posteriori in acciaio inossidabile spesse 10 ".

Il ladro vuole entrare e rubare il tuo impianto stereo, ma prima, ha bisogno di capire come entrare, vede che le porte sono praticamente impossibili da sfondare, tuttavia, a ulteriori indagini vede che le finestre sono aperte. Non può rubare i tuoi mobili (non in un unico pezzo almeno), ma può rubare il tuo impianto stereo, laptop, PC, ecc.

*) un po 'drammatico, lo so (:

Questa descrizione è ahimè! troppo generico e può essere applicato a quasi tutti gli attacchi. Sarebbe bello avere analogie più strette ...
@DeerHunter sì, copre molti attacchi, ma non riesco a pensare a niente di più ristretto ...
stava pensando in termini di scherzi telefonici / ingegneria sociale ... Che in realtà è abbastanza come l'iniezione di SQL in quanto stai impartendo comandi a qualcuno che li segue ciecamente.
@DeerHunter è un'idea molto buona, materializzalo in una risposta e io lo esagererò!
-1. L'ironia del tuo esempio non ha nulla a che fare con l'intelligenza di SQL injection. Affatto. Ha più a che fare con l'avere un servizio telnet senza password sul server. Vorrei avere 125 voti negativi per te.
Franco
2016-01-19 11:23:29 UTC
view on stackexchange narkive permalink

Dipende sempre dalla persona che ti ascolta, ma è così che glielo spiegherei -

Immagina di inviare un telegramma con un messaggio come -

"Felice anno nuovo! Fai attenzione. - Fred "

e qualcuno che non ha buone intenzioni che fosse in grado di accedere al tuo telegramma avrebbe intercettato e sostituito le parole evidenziate con -

"Felice anno nuovo! Inviaci denaro. - Fred "

Spero che aiuti! :)

La manomissione generale dei messaggi non illustra realmente la natura dell'iniezione SQL.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...