Sigueme por RSS! RSS

CodeIgniter: filtro XSS

Para evitar inyecciones XSS, CodeIgniter(CI) dispone de varios mecanismos para defenderse de estos tipos de ataque. Comenzando con la clase input, que entre sus funciones, provee métodos auxiliares que re-procesan los datos antes de hacer uso de ellos.

Una de las alternativas nos permite habilitar el filtro XSS que por defecto viene deshabilitado, para ello nos vamos a application/config/config.php, y buscamos la línea:
$config['global_xss_filtering'] = FALSE;

y la cambiamos por:
$config['global_xss_filtering'] = TRUE;

De esa manera se aplicaría el filtro XSS a todo lo que pase por POST/COOKIE.

Si no se desea usar el filtro global, podemos ir filtrando los datos cada vez que los vayamos a usar (pasando TRUE como segundo parámetro):
$this->input->post('mi_campo', TRUE);

- Todo lo que viene de la base de datos, también debería ser filtrado antes de imprimirlo en pantalla, CI nos facilita una sencilla función para convertir caracteres HTML a sus entidades correspondientes, haciendo uso de htmlspecialchars y permitiendonos filtrar un array entero con un sólo llamado:

/**
* Returns HTML escaped variable
*
* @access    public
* @param    mixed
* @return    mixed
*/
if ( ! function_exists('html_escape'))
{
    function html_escape($var)
    {
        if (is_array($var))
        {
            return array_map('html_escape', $var);
        }
        else
        {
            return htmlspecialchars($var, ENT_QUOTES, config_item('charset'));
        }
    }
}

html_escape esta disponible para ser usada en cualquier momento.

ejemplo de uso:
$var = '<script>alert(1)</script>';
echo html_escape($var).' - ';

$var = array('<script>alert(1)</script>','<b>hola</b>');
print_r(html_escape($var));

otro ejemplo:
function get_data(){

    $this->db->query('SELECT mi_campo FROM mi_tabla LIMIT 1');
    if ($query->num_rows()>0) {
        $row = $query->row_array();
        return html_escape($row['mi_campo']);
     }else{
         return false;
     }
}

0 comentarios: Suscribete a los comentarios por RSS

Publicar un comentario

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.