De CodeIgniter, ¿cómo puedo evitar la inyección sql? ¿Hay algún método para establecer en el archivo de configuración para evitar la inyección sql? Estoy usando este código para la selección de los valores:

$this->db->query("SELECT * FROM tablename WHERE var='$val1'");

y esta para la inserción de los valores:

$this->db->query("INSERT INTO  tablename (`var1`,`var2`) VALUES ('$val1','$val2')");

Otro método que se utiliza para insertar y seleccione los valores de la base de datos es CodeIgniter del insert() y get() métodos. Es cualquier oportunidad a la inyección de sql, mientras que el uso de CodeIgniter del bulit-en funciones

  • página roytuts.com/prevent-sql-injection-in-codeigniter/
  • También es bueno utilizar xss_clean método de ayuda en seguridad.
InformationsquelleAutor user667030 | 2011-05-02

6 Comentarios

  1. 57

    CodeIgniter del Active Record métodos automáticamente escapar de las consultas para usted, para evitar la inyección de código sql.

    $this->db->select('*')->from('tablename')->where('var', $val1);
    $this->db->get();

    o

    $this->db->insert('tablename', array('var1'=>$val1, 'var2'=>$val2));

    Si usted no desea utilizar los Registros Activos, puede utilizar enlaces de consulta para prevenir contra de la inyección.

    $sql = 'SELECT * FROM tablename WHERE var = ?';
    $this->db->query($sql, array($val1));

    O para la inserción puede utilizar el insert_string() método.

    $sql = $this->db->insert_string('tablename', array('var1'=>$val1, 'var2'=>$val2));
    $this->db->query($sql);

    También existe la escape() método si prefiere ejecutar sus propias consultas.

    $val1 = $this->db->escape($val1);
    $this->db->query("SELECT * FROM tablename WHERE var=$val1");
  2. 3

    Usted debe tratar de evitar escribir sus consultas directamente en una cadena y, a continuación, pasar a la función de consulta. Una mejor opción sería el uso de los Activos de la clase de Registro que va a construir su pregunta para usted y para escapar de los valores. http://codeigniter.com/user_guide/database/active_record.html

    Si quieres evitar el uso de los Activos de la clase de Registro por cualquier motivo, a continuación, puede ver la documentación de Codeigniter para la base de datos de la clase que tiene un método escape para escapar de sus valores antes de pasarlos al método de consulta. http://www.codeignitor.com/user_guide/database/queries.html

    Ben

  3. 1

    De CodeIgniter:
    Hay 2 medidas para evitar la Inyección SQL.
    Para aquellos que son novedad en la programación web, otro tipo de agujero de seguridad en la programación web, que puede ser mortal porque puede exponer a su lado interno de la aplicación de base de datos, es la Inyección de SQL.

    Y gracias de nuevo, Codeigniter tiene capacidad para tratar con él. Pero, por desgracia, muchos de CI programador he colaborado (y aún) hizo (o podría) olvidar este dos de acción para prevenir cualquier circunstancia de la inyección de SQL.

    Palo con ActiveRecord capacidad
    La primera cosa es no, en ningún caso, el trato con la consulta de los datos mediante el uso completo de la consulta como esta :

    $this->db->query("select * from users where user=$user and password=$password")

    Usted no sabe lo que exactamente dentro de $usuario o $contraseña variable cuando se trata del usuario que va a hacer deliberadamente la cosa equivocada. Incluso XSS sanitiser no tratar con alguien que las entradas de combinación de cotización, punto y coma o el carácter de guión en él.
    Así que en este caso, usted necesita aprender este Registro Activo cosa porque tiene entrada sanitiser capacidad dedicado a evitar la inyección de código SQL. Y no te preocupes, es de apoyo tipo de función de encadenamiento como este :

    $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
    
    $query = $this->db->get();

    Pero recuerde, esto no funciona si sigue la combinación de costumbre (parcialmente) función de consulta dentro de active record función como esta :

    $query = $this->db->where("title LIKE '%$input%'");

    Que en realidad podría ser cambiado como este.

    $query = $this->db->like("title", $input);

    El punto es, utilizar todos los bits de la posibilidad de CodeIgniter del Registro Activo y no meterse con él.

    Pero Si eso no funciona, no hay una alternativa
    Si usted tiene una muy larga consulta y no se molestan para convertir a un Registro Activo del estilo, usted puede depurar su entrada de forma manual mediante el uso de esta función :

    $sanitised_title = $this->db->escape($title);

    //Para uso interior COMO de consulta

    $sanitised_title = $this->db->escape_like_str($title);

    Y puede concatenar la depurada/escapó de entrada en el interior de su consulta.

  4. 0

    Puede comprobar si var contener sólo letras, de números, lo que significa que var mástil se en que formato definido.
    antes de insertar en la consulta

  5. 0

    Aceptando el valor del lado del cliente, Mejor usar este código,

    $client = $this->input->post('client',TRUE);

    Mientras que la inserción mejor usar codeigniter inserción de método,

    $this->db->insert('tablename',$values);

    Cuando se utiliza este método codeingniter automáticamente hacer todas escapar así que no hay necesidad de hacer escapar manual.

Dejar respuesta

Please enter your comment!
Please enter your name here