• Bannato User Attivo •

    Evitare sicuramente una SQL Injection

    Per l'abbinamento PHP/MYSQL come posso evitare una SQL Injection?
    Mi è sufficiente cambiare i caratteri ' e " con a e b?

    Creiamo un bel post su questo delicato argomento?


  • Bannato User Attivo •

    Ho appena trovato questa pillola:

    E' molto semplice evitare attacchi sql Injection occorre infatti solo un po' di attenzione da parte dello sviluppatore in tutte le implementazioni di codice che acquisiscono dati dall'esterno quei dati che possono essere manipolati dagli utenti.

    Praticamente occorre filtrare prima di passare i dati al database i caratteri

    ; -- + ' ( ) = > < @

    Per una maggiore protezione è opportuno filtrare anche alcune parole riservate di sql

    SELECT, INSERT, CREATE, DELETE, FROM, WHERE, OR, AND, LIKE, EXEC, SP_, XP_, SQL, ROWSET, OPEN, BEGIN, END, DECLARE

    E' assolutamente sufficiente fare questo?


  • Moderatore •

    nì. è un passo avanti di certo.

    io son un convinto sostenitore del casting delle variabili (se ti aspetti un dato numerico, controlla che lo sia, se ti aspetti un boleano, se devi registrare solo il codice fiscale, controlla, con una regexp, che ci siano solo quei caratteri ammessi e che siano disposti in un certo modo.

    esistono poi delle funzioni ad hoc, mysql_escape_string(), per dirne una, che tolgono di torno un sacco di problemi.

    :ciauz:


  • Super User •

    Ciao, 🙂
    secondo me questo articolo fa al caso tuo 😉


  • User Attivo •

    e in un portale o in un gestionale dove ci sono centianaia di campi come fai a gestire il tutto? per ogni campo un controllo specifico?


  • Bannato User Attivo •

    Allora io vorrei essere al sicuro per una paginazione.
    Metterò il codice che mi trasforma gli apici in "

    poi per il numero delle pagine controllerò che arrivino dei numeri.

    per scegliere in base a cosa ordinare mi è venuta questa idea. io nell'url mi faccio passare dei numeri e poi metto degli if:

    IF ($tipopag == 1) {allora $orberby = titolo}

    e così via.

    Per sceglere se ASC oppure DESC applico lo stesso ragionamento,
    se mi passo 1 metto la variabile $var =ASC altrimenti la metto come DESC.

    In questo modo faccio il controllo che arrivino tre variabili numeriche...
    SONO SICURO DI EVITARE INJECTION operando in questo modo?


  • Bannato User Attivo •

    @massy said:

    nì. è un passo avanti di certo.

    io son un convinto sostenitore del casting delle variabili (se ti aspetti un dato numerico, controlla che lo sia, se ti aspetti un boleano, se devi registrare solo il codice fiscale, controlla, con una regexp, che ci siano solo quei caratteri ammessi e che siano disposti in un certo modo.
    Il solo casting delle variabili è sufficiente?


  • Bannato User Attivo •

    il casting della variabile page che deve essere numerica non mi funziona se uso in carattere #

    se metto ?page=90#
    mi carica la pagina 90 senza dirmi parametro non valido
    se scrivo?page=9#0
    mi carica la pagina 9 senza dirmi parametro non valido!

    Come posso fare?


  • User Newbie •

    @fabioski said:

    il casting della variabile page che deve essere numerica non mi funziona se uso in carattere #

    se metto ?page=90#
    mi carica la pagina 90 senza dirmi parametro non valido
    se scrivo?page=9#0
    mi carica la pagina 9 senza dirmi parametro non valido!

    Come posso fare?

    Ciao, il simbolo # negli url precede un'ancora: la parte successiva al simbolo # non fa parte dei parametri