codeigniter
Asegurando su aplicación web
Buscar..
Introducción
Recordar CodeIgniter es un Framework de desarrollo. No se esfuerza por hacer que su aplicación sea segura. Simplemente te da las herramientas para hacerlo tú mismo. Si miras la página de seguridad de CI, es bastante claro que esperan que el desarrollador entienda la seguridad de la aplicación y la incorpore en su aplicación.
Si la seguridad de la aplicación web es relativamente nueva para usted, comenzaría con OWASP. Podría ser ventajoso ver otros marcos como Zend o Cake que creo que hacen más cosas por adelantado
Sintaxis
- $ freshdata = $ this-> security-> xss_clean ($ user_input_data);
Parámetros
matriz de entrada del usuario | blanco |
---|---|
inserte una matriz de entrada de usuario en xss_filter($array of user input) | Blanco |
Prevención XSS
XSS significa scripts entre sitios. CodeIgniter viene con seguridad de filtrado XSS. Este filtro evitará cualquier código JavaScript malicioso o cualquier otro código que intente secuestrar cookies y realizar actividades maliciosas. Para filtrar datos a través del filtro XSS, use el método xss_clean () como se muestra a continuación.
$data = $this->security->xss_clean($data);
Debe utilizar esta función solo cuando está enviando datos. El segundo parámetro booleano opcional también se puede usar para verificar el archivo de imagen para el ataque XSS. Esto es útil para la facilidad de carga de archivos. Si su valor es verdadero, significa que la imagen es segura y no de otra manera.
Prevención de inyección SQL
La inyección SQL es un ataque realizado en la consulta de la base de datos. En PHP, usamos la función mysql_real_escape_string () para evitar esto junto con otras técnicas, pero CodeIgniter proporciona funciones y bibliotecas incorporadas para evitar esto.
Podemos evitar la inyección SQL en CodeIgniter de las siguientes tres formas:
- Consultas de escape
- Consulta de consultas
- Clase de registro activo
Consultas de escape
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape()
agrega automáticamente comillas simples alrededor de los datos y determina el tipo de datos para que solo pueda escapar datos de cadenas.
Consulta de consultas
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
En el ejemplo anterior, el signo de interrogación (?) Será reemplazado por la matriz en el segundo parámetro de la función de query()
. La principal ventaja de generar consultas de esta manera es que los valores se escapan automáticamente, lo que produce consultas seguras. El motor de CodeIgniter lo hace por usted automáticamente, por lo que no tiene que recordarlo.
Clase de registro activo
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
Usando registros activos, la sintaxis de consulta es generada por cada adaptador de base de datos. También permite consultas más seguras, ya que los valores se escapan automáticamente.
Ocultar errores de PHP
En el entorno de producción, a menudo no queremos mostrar ningún mensaje de error a los usuarios. Es bueno si está habilitado en el entorno de desarrollo para propósitos de depuración. Estos mensajes de error pueden contener cierta información, que no debemos mostrar a los usuarios del sitio por razones de seguridad.
Hay tres archivos CodeIgniter relacionados con errores. Nivel de informe de errores de PHP
Un entorno diferente requiere diferentes niveles de informe de errores. Por defecto, el desarrollo mostrará errores, pero las pruebas y en vivo los ocultarán. Hay un archivo llamado index.php en el directorio raíz de CodeIgniter, que se usa para este propósito. Si pasamos cero como argumento a la función error_reporting (), eso ocultará todos los errores.
Prevención CSRF
CSRF significa falsificación de solicitud entre sitios. Puede evitar este ataque habilitando una opción en el archivo application / config / config.php como se muestra a continuación.
$config['csrf_protection'] = TRUE;
Cuando creas un formulario usando la función form_open()
, insertará automáticamente un token CSRF en un campo oculto. También puede agregar manualmente el token CSRF usando la función get_csrf_token_name()
y get_csrf_hash()
. Como sus nombres sugieren, la función get_csrf_token_name()
devolverá el nombre del token CSRF, mientras que get_csrf_hash()
devolverá el hash.
El token CSRF se puede regenerar cada vez que se envía o también puede mantenerse igual durante toda la vida de la cookie CSRF. La configuración de la opción de configuración 'csrf_regenerate' forzará la regeneración del token como se muestra a continuación.
$config['csrf_regenerate'] = TRUE;
Puede incluir en la lista blanca las URL de la protección CSRF configurando las coincidencias para ellas en la matriz de configuración usando la clave 'csrf_exclude_uris' como se muestra a continuación. También puedes usar expresiones regulares.
$config['csrf_exclude_uris'] = array('api/person/add');
Eliminar datos de abuso de la entrada del usuario
// XSS Filtering
$data = array(
'name'=> '<script>Abuse Data</script>'
);
$data = $this->security->xss_clean($data); // Clean Data
// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>
Prevención XSS en la entrada del usuario
No confíe en ninguna entrada del usuario. el usuario ingresa todo como la etiqueta <script>
o cualquier alert();
javascript alert();
así que tenemos que evitar que todos los datos no se ejecuten en nuestro navegador. por lo que tenemos que usar el método de prevención xss para restringir nuestros datos seguros y mantenerlos en manos de piratas informáticos, y también es responsabilidad del desarrollador la validación de las entradas del usuario y la resolución de errores mediante programación.
Entonces, verifique que este es un ejemplo de prevención xss en CodeIgniter.
$data = array(
'name' => "<script>alert('abc')</script>",
'email' => "[email protected]"
);
var_dump($data);
// Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert
// now print data after xss filtering
$data = $this->security->xss_clean($data);
var_dump($data);
//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert
por lo tanto, después de agregar xss_filtering, no tenemos ningún problema para ejecutar ningún código de abuso que ingrese el usuario. y CodeIgniter reemplaza esta etiqueta de abuso con la palabra clave [removed]
.