Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Buscando la lnea:
$config['global_xss_filtering'] = TRUE;
ATENCIN: El filtrado, activado globalmente se ejecuta automticamente sobre COOKIES y POST. Para llamar a la funcin explcitamente se debe ejecutar el siguiente cdigo:
if ($this->security->xss_clean($file, TRUE) === FALSE) { // file failed the XSS test }
Para ver lo que representa el segundo parmetro de la funcin xss_clean(), leer la Gua de Usuario de CI. Como nota aparte, antes de utilizar los arreglos mgicos $_SERVER, $_POST, $_GET, o $_COOKIE es conveniente utilizar las correspondientes funciones "input" que provee CI: http://codeigniter.com/user_guide/libraries/input.html Adems, algunas de dichas funciones permiten como segundo parmetro (opcional) especificar explcitamente si ser quiere realizar un filtrado XSS sobre dicho INPUT. Por ejemplo
// Al obtener los datos de $_POST['some_data'], previo filtrado XSS $sd = $this->input->post('some_data', TRUE);
Utilizar codificacin adems de lo visto arriba, por que no hace chequeos sobre el cdigo javascript en su totalidad:
$myvar = urlencode($this->input->post(myvar)); $this->load->view(myview, array(myvar => $myvar));
fuente: http://ponderwell.net/2010/08/codeigniter-xss-protection-is-good-but-not-enough-byitself/
y activar la opcin:
$config['csrf_protection'] = TRUE;
Esta funcin insertar automticamente en un campo oculto un TOKEN. Luego, al procesar el formulario, se debe verificar la existencia del TOKEN para poder comprobar que la peticin provino realmente del formulario en cuestin. Para ver cmo emplear esta caracterstica en sitios que utilicen AJAX: http://aymsystems.com/ajax-csrf-protection-codeigniter-20
de produccin. 2. sess_expire_on_close: dem anterior. 3. sess_expiration: Duracin de la sesin en segundos (por defecto es de 2 Hs = 7200 Segs). NOTA IMPORTANTE: Tal como explica la documentacin de CI, el manejo de la sesin que mediante las funciones que incluye CI no hacen uso de las funciones nativas de PHP para le manejo de sesiones.
5. Manejo de datos "de ingreso" al sistema, o "que deben ser mostrados al usuario"
Por regla general se debe desconfiar al 100% de los datos que provengan del usuario (tambin se debe desconfiar de algunos datos almacenados, pero ya se ver esto ms adelante). Antes de utilizar o almacenar algn valor que provenga de la entrada de usuario, dicho valor: 1. Debe ser siempre validado a travs de la librera de CI, 2. No debe utilizarse nunca directamente en alguna sentencia que involucre "comillas mgicas" (aunque esta caracterstica se encuentra marcada como DEPRECATED en PHP-5.3.0), 3. ... Si los datos deben ser mostrados en pantalla, por ejemplo cuando se debe REPOPULAR UN FORMULARIO, es conveniente filtrar los datos antes de mandarlos a la salida (antes de enviarlos a un 'echo'), utilizando algunas de las siguiente funciones de PHP:
1. htmlspecialchars(), http://ar.php.net/htmlspecialchars. o, 2. htmlentities(), http://ar.php.net/manual/es/function.htmlentities.php, 3. Funciones prepping de CI,
http://codeigniter.com/user_guide/libraries/form_validation.html#preppingdata hay que buscar ejemplo de cmo se utilizan estas funciones en situaciones que NO sean el procesado de formularios) Estos filtrados previos deben realizarse con el fin evitar mostrar por pantalla contenido entre etiquetas especiales como <spript>. De esta forma, prevenimos la inyeccin de cdigo que pueda explotar vulnerabilidades XSS/CSRF que pueda ser ejecutado en el navegador del usuario. Escapar esto caracteres mediante entidades HTML evita el interpretado de los mismos.
Ademas los elementos de la consultas deben ser parmetros. Tampoco hay que incluir magic quotes. Ejemplo :
//INSEGURO $this->db->query("SELECT username FROM user WHERE id='$idUsuario'"); //SEGURO $this->db->query('SELECT username FROM user WHERE id=?', array($idUsuario));
El contenido de las cookies debe estar encriptado y debe almacenarse en ellas la direccion del usuario(IP)(para validacin). Fuente: http://stackoverflow.com/questions/1633062/how-to-prevent-cookie-poisoning
LINKS
XSS: http://stackoverflow.com/questions/1996122/how-to-prevent-xss-with-html-php http://stackoverflow.com/questions/71328/what-are-the-best-practices-for-avoiding-xssattacks-in-a-php-site http://ha.ckers.org/xss.html SQLi: http://ha.ckers.org/sqlinjection/
Suponiendo que se utilicen varios usuarios de prueba, dicha cantida de usuarios deber mantenerse mnima (y controlarse al momento de desplegar el sistema en el entorno de PRODUCCIN/PRUEBA).
El Proyecto OWASP (Open Web Application Security Proyect) provee un rankinglistado de los 10 riesgos presentes en la mayora de las aplicaciones web anualmente. Cabe aclarar que dicho listado expone un ranking de riesgos y no de ataques a aplicaciones web. Esta diferenciacin entre los concepts "riesgo/amenaza y ataque" se debe a que el rnking tambin pondera otras caractersticas del riesgo como puede ser el grado de influencia en el sistema vctima (por ejemplo una amenaza puede realizar alteraciones leves de datos, mientras que otra amenaza puede representar una prdida total de datos).