injection escape function codeigniter sql-injection built-in data-security

function - injection - escape codeigniter



cómo evitar la inyección de sql en codeigniter (6)

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

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

y esto para insertar valores:

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

Otro método utilizado para insertar y seleccionar valores de la base de datos son los métodos insert() y get() CodeIgniter. Hay alguna posibilidad de inyectar sql al usar las funciones de inserción de CodeIgniter


Al aceptar el valor del lado del cliente, es mejor usar este código,

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

Al insertar un método de inserción de codeignador mejor para usar,

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

Al usar este método, codeingniter automáticamente hace todo el escape así que no es necesario que escape el manual.


En CodeIgniter: hay 2 acciones para evitar la inyección de 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 fatal porque puede exponer el lado interno de la base de datos de la aplicación, es la Inyección SQL.

Y afortunadamente, Codeigniter tiene la capacidad de manejarlo. Pero desafortunadamente, muchos de los programadores de CI que colaboré (e incluso ustedes) olvidaron (o podrían) estas dos acciones para evitar cualquier circunstancia de inyección de SQL.

Quédate con la capacidad de ActiveRecord Lo primero es que en ninguna circunstancia se ocupe de consultar los datos usando una consulta completa como esta:

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

No se sabe exactamente qué hay dentro de $ user o $ password variable cuando se trata de un usuario que deliberadamente hará lo incorrecto. Incluso el desinfectante XSS no se ocupará de alguien que ingrese una combinación de comillas, punto y coma o guiones en él. Entonces, en este caso, debe aprender esto de Active Record porque tiene la capacidad de desinfección de entrada dedicada a prevenir la inyección de SQL. Y no se preocupe, es compatible con el tipo de cadena de funciones como esta:

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

Pero recuerde, no funcionará si aún combina la función de consulta habitual (parcialmente) dentro de la función de grabación activa como esta:

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

Que en realidad podría ser cambiado así.

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

El punto es usar toda la posibilidad de registro activo de CodeIgniter y no meterse con eso.

Pero si eso no funciona, hay una alternativa. Si tiene una consulta muy larga y no se molesta en convertirla al estilo de Active Record, puede desinfectar su entrada manualmente usando esta función:

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

// Para uso dentro de la consulta LIKE

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

Y puede concatenar con seguridad la entrada saneada / escapada dentro de su consulta.


Intente evitar escribir sus consultas directamente en una cadena y luego pasarlas a la función de consulta. Una mejor opción sería usar la clase Active Record, que creará sus consultas para usted y escapará de los valores. http://codeigniter.com/user_guide/database/active_record.html

Si desea evitar el uso de la clase Active Record por cualquier razón, puede ver la documentación de Codeigniter para la clase de base de datos que tiene un método de escape para escaparse de sus valores antes de pasarlos al método de consulta. http://www.codeignitor.com/user_guide/database/queries.html

Ben


Puede verificar si var solo contiene letras de números, lo que significa que puede estar en su formato definido. antes de insertarlo en la consulta



Los métodos de Active Record de CodeIgniter escapan automáticamente de las consultas para evitar la inyección de sql.

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

o

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

Si no desea utilizar registros activos, puede usar enlaces de consulta para evitar la inyección.

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

O para insertar, puede usar el método insert_string() .

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

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

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