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; } }
- Los comentarios están siendo moderados y serán publicados en la brevedad posible.