CodeIgniter - Seguridad

Prevención XSS

XSS significa secuencias de comandos 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 elxss_clean() método como se muestra a continuación.

$data = $this->security->xss_clean($data);

Debe utilizar esta función solo cuando envíe datos. El segundo parámetro booleano opcional también se puede usar para verificar el archivo de imagen para un ataque XSS. Esto es útil para la función 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, usamosmysql_real_escape_string() función para evitar esto junto con otras técnicas, pero CodeIgniter proporciona funciones y bibliotecas incorporadas para evitar esto.

Podemos evitar la inyección de SQL en CodeIgniter de las siguientes tres formas:

  • Escapar de consultas
  • Oferta de consulta
  • Clase de registro activo

Escapar de consultas

<?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() La función agrega automáticamente comillas simples alrededor de los datos y determina el tipo de datos para que solo pueda escapar de los datos de cadena.

Oferta de consulta

<?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 query (). La principal ventaja de crear consultas de esta manera es que los valores se escapan automáticamente, lo que genera consultas seguras. El motor 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]'));
?>

Al utilizar registros activos, cada adaptador de base de datos genera la sintaxis de consulta. También permite consultas más seguras, ya que los valores 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 con fines de depuración. Estos mensajes de error pueden contener cierta información que no deberíamos 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 notificación de errores. De forma predeterminada, el desarrollo mostrará errores, pero las pruebas y en vivo los ocultarán. Hay un archivo llamadoindex.phpen el directorio raíz de CodeIgniter, que se utiliza para este propósito. Si pasamos cero como argumento aerror_reporting() función entonces que ocultará todos los errores.

Error de la base de datos

Incluso si ha desactivado los errores de PHP, los errores de MySQL siguen abiertos. Puedes apagar esto enapplication/config/database.php. Selecciona eldb_debug opción en $db matriz a FALSE Como se muestra abajo.

$db['default']['db_debug'] = FALSE;

Registro de errores

Otra forma es transferir los errores a los archivos de registro. Por lo tanto, no se mostrará a los usuarios del sitio. Simplemente, configure ellog_threshold valor en $config matriz a 1 en application/cofig/config.php archivo como se muestra a continuación.

$config['log_threshold'] = 1;

Prevención de CSRF

CSRF significa falsificación de solicitudes entre sitios. Puede prevenir este ataque habilitándolo en elapplication/config/config.php archivo como se muestra a continuación.

$config['csrf_protection'] = TRUE;

Cuando está creando un formulario usando form_open()función, insertará automáticamente un CSRF como campo oculto. También puede agregar manualmente el CSRF usando elget_csrf_token_name() y get_csrf_hash()función. losget_csrf_token_name() La función devolverá el nombre del CSRF y get_csrf_hash() devolverá el valor hash de CSRF.

El token CSRF se puede regenerar cada vez que se envía o también puede mantenerlo durante toda la vida de la cookie CSRF. Estableciendo el valorTRUE, en la matriz de configuración con clave ‘csrf_regenerate’ regenerará el token como se muestra a continuación.

$config['csrf_regenerate'] = TRUE;

También puede incluir en la lista blanca las URL de la protección CSRF configurándola en la matriz de configuración con la clave ‘csrf_exclude_uris’Como se muestra abajo. También puede utilizar expresiones regulares.

$config['csrf_exclude_uris'] = array('api/person/add');

Manejo de contraseñas

Muchos desarrolladores no saben cómo manejar las contraseñas en las aplicaciones web, lo que probablemente explica por qué a numerosos piratas informáticos les resulta tan fácil entrar en los sistemas. Uno debe tener en cuenta los siguientes puntos al manejar las contraseñas:

  • NO almacene las contraseñas en formato de texto sin formato.

  • Siempre hash tus contraseñas.

  • NO use codificación Base64 o similar para almacenar contraseñas.

  • NO utilice algoritmos hash débiles o rotos como MD5 o SHA1. Utilice solo algoritmos de hash de contraseña seguros como BCrypt, que se utiliza en las funciones de hash de contraseña de PHP.

  • Nunca muestre ni envíe una contraseña en formato de texto sin formato.

  • NO ponga límites innecesarios a las contraseñas de sus usuarios.