Vulnerabilità di SQL injection a CodeIgniter

1

Ciao, voglio sapere perché questo tipo di domanda di esempio non è mai stata posta prima. Ho ricevuto questo codice dal mio college che dicono che questo tipo di codice è in grado di prevenire l'iniezione SQL.
Usiamo CodeIgniter per costruire un sito Web e qui è il codice per prevenire l'iniezione SQL.

Controller:

$usr = $this->input->post('userid');
$pwd = $this->input->post('passwd');

if($usr && $pwd) {
                $ack = $this->mAuth->get_user($usr);
$pwx = $ack['passwd'];
                    if($ack && $pwd == $pwx) {
                        //redirect code
}

Modello:

public function get_user($user_id='', $status=1) {
        $user_id = $this->db->escape(trim($user_id));
        $status  = $status ? 'and user_status_uid = 1' : '';

        $sql = "select * from users where user_id = lower($user_id)"

        return rst2Array($sql, 'row');
    }

Ho provato ad accedere con 1' o 1 = 1 ed ecc., ho trovato e impedito l'SQL injection anche se è solo un testo e una password.

C'è qualche vulnerabilità a questo codice? grazie

    
posta Gamma 15.08.2014 - 05:10
fonte

1 risposta

3

Questo tipo di domande probabilmente non è mai stato chiesto qui prima perché è più adatto a StackOverflow.

Ci sono modi più semplici e migliori per proteggere da SQL injection in Codeigniter - I strong ti suggerisco di guardare Query Binding (nella parte inferiore della pagina collegata) o Active Records . Entrambi ti sfuggiranno le domande in un modo che è molto più facile da fare e più difficile da dimenticare accidentalmente. Ho sviluppato e mantenuto diversi siti Web Codeigniter e Query Binding & I record attivi sono molto migliori modi per proteggere il tuo database, poiché è meno probabile che manchi l'escape di un parametro.

Ciò che hai è sicuro dall'iniezione SQL (a condizione che la funzione db- > escape di Codeigniter funzioni correttamente, il che, per quanto ne sappia,), ma se in qualsiasi momento ti dimentichi di sfuggire anche a una cosa che query, quindi sarai vulnerabile all'iniezione SQL.

Se questo è per un incarico universitario, questa osservazione non è terribilmente applicabile, ma al di fuori del mondo accademico, la memorizzazione di password in testo semplice è considerata una pratica di sicurezza terribile. È molto meglio usare crypt con un http per utente o password_hash se l'installazione di PHP è abbastanza recente.

    
risposta data 15.08.2014 - 06:45
fonte

Leggi altre domande sui tag