Segurança contra ataques XSS e CSRF no CodeIgniter

Segurança contra ataques XSS e CSRF no CodeIgniter

01/11/2019 1 Por Jonathan Lamim

Segurança é fundamental em qualquer tipo de sistema, seja web, desktop ou mobile. Não importa o framework utilizado, o ambiente de desenvolvimento ou o tipo de servidor, sempre é preciso cuidar da segurança dos sistemas que você desenvolve.

Nesse artigo vou falar sobre algumas boas práticas de segurança no CodeIgniter. Apresentarei alguns recursos nativos para ajudar no aumento da segurança da sua aplicação.

Segurança contra ataque XSS

Cross-site scripting (XSS) é um tipo de vulnerabilidade do sistema de segurança de um computador, encontrado normalmente em aplicações web que ativam ataques maliciosos ao injetarem script client-side dentro das páginas web vistas por outros usuários. Um script de exploração de vulnerabilidade pode ser usado pelos atacantes para escapar aos controles de acesso que usam a política de mesma origem. (Wikipedia)

O CodeIgniter possui um método dentro da classe Security chamado xss_clean(), e esse método deve ser utilizado para tratamento dos dados contra XSS. Nas versões mais recentes do framework o filtro é aplicado automaticamente em todas as requisições GET, POST ou COOKIE.

Você também pode forçar a execução manual do filtro, usando o seguinte código:

$this->security->xss_clean($dados);

Ele retornará os dados passados como parâmetro devidamente tratados, evitando assim um ataque XSS.

Esse método xss_clean() aceita um segundo parâmetro, que é um booleano, e esse determina se o valor passado no primeiro parâmetro é uma imagem ou não. Imagens também podem ser fontes potenciais de ataque XSS. Então sempre que for fazer um upload de imagem, utilize esse filtro.

Veja um exemplo de aplicação a seguir:

if($this->security->xss_clean($arquivo, TRUE) === FALSE)
{
   //Arquivo não passou no teste de XSS
}

Segurança contra ataque CSRF

O CSRF (do inglês Cross-site request forgery- Falsificação de solicitação entre sites) é um tipo de ataque informático malicioso a um website no qual comandos não autorizados são transmitidos através de um utilizador em quem o website confia. [1] Em contraste com o cross-site scripting (XSS), que explora a confiança de um utilizador para um site particular, o CSRF explora a confiança que um website tem do navegador do usuário. (Wikipedia)

O CodeIgniter possui rotinas nativas para lidar com CSRF, tudo de forma simples e eficiente. Para ativar o CSRF, basta alterar a variável de configuração $config['csrf_protection'] no arquivo application/config/config.php.

A partir daí, caso você esteja utilizando as funções do helper Form, os campos do tipo hidden com o token para processamento serão gerados de forma automática. Mas se você estiver criando o formulário manualmente, com HTML puro, então você vai precisar obter esse token no controller e enviar para a view onde está o formulário.

Veja no fragmento de código abaixo como recuperar essas informações para poder inserir no formulário:

<?php
/*
 * Código do Controller
 */
$csrf = array(
    'nome' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
);
?>

<!-- Código da View -->
<input type="hidden" name="<?=$csrf['nome'];?>" value="<?=$csrf['hash'];?>" />

Aqui no portal temo um artigo com mais informações sobre CSRF. Vale a pena conferir: Reforçando a segurança de aplicações em CodeIgniter com CSRF

Fique ligado, a segurança do seu sistema é muito importante.

Até a próxima!