2010-09-26 47 views
12

Algunas dudas con respecto a Codeigniter y sus capacidades de manejo de entrada. Algunos pueden ser un poco raros, pero son dudas, no obstante.SQL Injection y Codeigniter

  1. Si utilizo las funciones de clase Active Record en CodeIgniter, ¿se previene mi entrada contra la inyección de SQL?
  2. He leído en alguna parte que sí, pero no entiendo cómo? ¿o por qué?
  3. También se trata xssclean con inyección SQL de alguna manera?
+1

La palabra 'active record' se puede malinterpretar y los documentos de CI cambian a' query builder' https://codeigniter.com/user_guide/database/query_builder.html – teek

Respuesta

16

se impide la entrada de mi frente a la inyección de SQL?

No exactamente "automáticamente", pero proporciona consultas con parámetros. CodeIgniter o no, debe utilizar las consultas parametrizadas con preferencia para consultar el pirateo de cadenas siempre que sea posible.

$bof= "a'b"; 
$zot= 'a\b'; 

// Insecure! Don't do this! 
// 
$this->db->query("SELECT foo FROM bar WHERE bof='$bof' AND zot='$zot'"); 

// Secure but annoying to write 
// 
$this->db->query("SELECT foo FROM bar WHERE bof='".$this->db->escape($bof)."' AND zot='".$this->db->escape($zot)."'"); 

// This is what you want 
// 
$this->db->query('SELECT foo FROM bar WHERE bof=? AND zot=?', array($bof, $zot)); 

Nota esto no es nada que ver con ‘entrada’: cuando realiza una consulta SQL de ustedes cadenas imprescindible el uso de parametrización o escapar de hacerlos aptos, independientemente de si son o no la entrada del usuario.Esta es una cuestión de corrección simple; la seguridad es un efecto secundario de esa corrección.

Del mismo modo cuando el texto de salida en HTML, es necesario iniciar la codificación HTML a <, & y " personajes en él continuación. De nada sirve intentar jugar con la entrada para escapar o eliminar caracteres que podrían ser problemáticos en el futuro si los usa sin escaparse en SQL o HTML. Destruirá su producción teniendo escapes inesperados de SQL en HTML (por lo que ve barras invertidas auto-multiplicadas en aplicaciones mal escritas) y escapadas de HTML no deseadas en SQL. Y si toma texto de otra parte que no sea la entrada directa del usuario (por ejemplo, el material que ya está en la base de datos), no estará protegido en absoluto.

También se trata xssclean con la inyección SQL de alguna manera?

No. Está destinado a la inyección de HTML. Pero es peor que inútil. Nunca lo use

"Filtrado XSS" es completamente falso (de nuevo, CodeIgniter o de cualquier otra persona). XSS debe evitarse mediante una salida de escape de HTML correcta, sin modificar la entrada. El filtrado XSS no le protegerá adecuadamente si su aplicación aún no es segura; en el mejor de los casos, ofuscará sus defectos existentes y le dará una falsa sensación de seguridad. También destruirá una gran cantidad de datos válidos que CI cree que parecen etiquetas.

+0

¡Interesante! El último punto especialmente. Creo que tu camino es realmente mejor. – OrangeRind

+2

¿Le interesa explicar por qué el xssclean de CI no tiene valor? ¡Tengo mucha curiosidad! Es la mitad de la razón por la que uso CI. Me gustaría saber si me estoy engañando y no estoy seguro. – kevtrout

+0

Si recuerdas usar HTML-escape de todas las cadenas que ingresas en tus páginas HTML, estás seguro de si usas 'xss_clean', y todo lo que harás por ti es manipular silenciosamente tus cadenas de entrada, en un tono aterradoramente extraño formas. En serio, eche un vistazo a 'function xss_clean' en' Input.php' y ría, ya que reemplaza las cosas con '%' in, URL-decodes, reemplaza las cosas con '%', rompe los enlaces codificados en URL, altera las palabras con símbolos entre ellos, escapa * algunos * signos menos que '<', y le impide hablar de 'innerHTML' o usar la palabra' alerta' ... y más ... – bobince

1

Cuando utilice entrada generada por el usuario, páselo a través de la biblioteca de entrada donde filtra las inyecciones xss y sql.

$this->input->post() 

http://codeigniter.com/user_guide/libraries/input.html

Hacer el registro para obtener más información sobre el filtrado de seguridad.

En el marco de CI comprobar el archivo de archivo

Codeigniter->System-libraries->input.php 

, donde puedes encontrar internamente las funciones utilizadas por CI para la higienización de datos.

XSS limpia básicamente significa filtrando no deseados XHTML/HTML Etiquetas

+0

De acuerdo con su propio enlace '$ this-> input- > post() 'no hace nada para evitar la inyección de SQL. – Mischa

1

1. lo hace, si lo haces correctamente

2. Es probable que haya notado que todas las llamadas a funciones son de una manera que se pasa los datos de usuario en una variable cada uno. Por lo tanto, ni siquiera tiene la posibilidad de pasar el código de control SQL y los datos de usuario en una variable. Hablando en pocas palabras, los datos se encapsulan en una variable cada uno. Por lo tanto, se puede codificar de forma segura sin romper su código SQL. La excepción es, sin embargo, si pasa toda su consulta. Entonces no es posible. Si lo hace

$db->query("select * from table where password = 'hello ' or '1=1"); 

no hay forma de saber lo que se debe escapó y cuál no, pero si usted cita en como esto

$db->query("select * from table where password = ?",array('param1')); 

la variable de usuario se encapsula en una variable y será escapado.

3. Sí lo hace, pero su propósito no es primpary para evitar la inyección de SQL, yo prefiero depender de http://codeigniter.com/user_guide/libraries/input.html

+0

Creo que no debería haber comillas simples alrededor del parámetro '?' Aquí. – bobince

+0

hmm ... realmente no puedo decir. creo que es correcto de esa manera. por supuesto que no lo necesitas cuando tienes números enteros, pero realmente no importa ... ¿entonces es mejor escribirlo así? –

+1

Bueno, no he probado esto con CodeIgniter específicamente, pero de lejos la forma más común de hacer consultas parametrizadas es usar un '' 'desnudo como un punto de reemplazo, y tratar' '?' 'En una cadena como un real signo de interrogación. Esta parece ser la sintaxis dada en http://codeigniter.com/user_guide/database/queries.html, de todos modos. – bobince

Cuestiones relacionadas