• 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