vulnerabilidad de inyección SQL a CodeIgniter

1

Hola, quiero saber por qué este tipo de pregunta de ejemplo nunca se hizo antes. Recibí este código de mi universidad que dice que este tipo de código puede prevenir la inyección de SQL.
Utilizamos CodeIgniter para crear un sitio web y aquí está el código para evitar la inyección de SQL.

Controlador:

$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
}

Modelo:

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');
    }

Intenté iniciar sesión con 1' o 1 = 1 y etc., encontré y previno la inyección de SQL aunque solo es un texto simple y una contraseña.

¿Existe alguna vulnerabilidad a este código? gracias

    
pregunta Gamma 15.08.2014 - 05:10
fuente

1 respuesta

3

Es probable que este tipo de pregunta nunca se haya hecho aquí antes porque es más adecuado para StackOverflow.

En Codeigniter, fuertemente le sugiero que consulte Hay formas mejores y más fáciles de protegerse contra la inyección de SQL. /queries.html"> Query Binding (en la parte inferior de la página enlazada) o Registros activos . Ambos escaparán de las consultas para usted de una manera mucho más fácil de hacer y más difícil de olvidar. He desarrollado y mantenido varios sitios web de Codeigniter, y Query Binding & Active Record son mucho mejores formas de proteger su base de datos, ya que es menos probable que pierda un parámetro.

Lo que tiene está a salvo de la inyección de SQL (siempre que la función db- > escape de Codeigniter funcione correctamente, lo que a mi entender es que sí), pero si en algún momento olvida escapar incluso una cosa que entra en su consulta, entonces serás vulnerable a la inyección de SQL.

Si esto es para una asignación universitaria, esta observación no es muy aplicable, pero fuera de la academia, el almacenamiento de contraseñas en texto sin formato se considera una práctica de seguridad terrible. Es mucho mejor usar crypt con un salt por usuario, o password_hash si su instalación de PHP es lo suficientemente reciente.

    
respondido por el William Lawn Stewart 15.08.2014 - 06:45
fuente

Lea otras preguntas en las etiquetas