Ho sentito che la funzione eval()
è vulnerabile a SQLi.
Posso verificare le vulnerabilità semplicemente visualizzando il codice sorgente del sito web?
Ho sentito che la funzione eval()
è vulnerabile a SQLi.
Posso verificare le vulnerabilità semplicemente visualizzando il codice sorgente del sito web?
Dipende da cosa intendi per "codice sorgente".
Se si utilizza la funzione "visualizza sorgente" in un browser Web, ciò non è sufficiente. Questo mostra il codice lato client, mentre SQLi si verifica sul lato server.
Se si esamina il codice sorgente completo che è in esecuzione sul server, allora sì, esaminarlo può farti trovare problemi SQLi. È anche possibile trovare SQLI decompilando i file eseguibili se un sistema utilizza ASP senza file di origine sul server ma non riesce a proteggere i file compilati dal download.
Il tipico attacco di SQL injection può verificarsi quando la stringa di comando SQL è concatenata per includere una voce utente:
$sql = "SELECT * FROM users WHERE user_name = '".$user_name."'";
Un utente malintenzionato potrebbe inserire un nome utente come
my name'; DROP TABLE users; --
Indovina cosa succede!
È meglio utilizzare istruzioni preparate e query parametrizzate .
eval()
ti consente di valutare il codice, quindi puoi avere un'iniezione di codice. Esempio: eval("echo 2;");
stamperà 2 in PHP.
In PHP hai anche shell_exec()
dove puoi eseguire i comandi della shell.
Puoi controllare diversi tipi di iniezione qui .
Guardare al codice sorgente del sito Web è un modo valido per controllare i collegamenti ad altre pagine e verificare quali parametri di query vengono utilizzati. Puoi anche controllare i moduli.
Un altro modo è controllare la scheda Rete per visualizzare quali informazioni vengono inviate e ricevute dal tuo browser. Prova a dare un'occhiata a Burp Suite , ti aiuterà a capire meglio come intercettare le richieste e manometterle per verificare alcune vulnerabilità .
In realtà, se si ha accesso alla sorgente di back-end allora sì, sarete in grado di identificare SQLi , ma in un altro caso no, lo faccio sempre manualmente, testando tutti i parametri di input , ad esempio riempiendo nome utente e password con 'OR' 1 = 1 & eccetera... Scoprire se il codice SQL sta disinfettando i parametri del post.
Leggi altre domande sui tag php sql-injection source-code mysql sql-server