Reforçando a segurança de aplicações em CodeIgniter com CSRF

Reforçando a segurança de aplicações em CodeIgniter com CSRF

27/04/2016 1 Por Jonathan Lamim

Essa é uma dica rápida, mas muito valiosa e que vai te ajudar a aumentar a segurança das suas aplicações em CodeIgniter.

CSRF (Cross Site Request Forgeries) é um tipo de ataque que força os usuários a executarem ações indesejadas dentro da aplicação, através de comandos não autorizados.

O CodeIgniter já possui rotinas nativas pra lidar com CSRF, e são bem simples de serem aplicadas.

A configuração para a implementação de segurança com CSRF é feita no arquivo application/config/config.php, onde você deve alterar o valor de $config['csrf_protection'] para TRUE, ativando assim a proteção CSRF.

Nos formulários, caso você utilize o helper Form, crie os formulários usando form_open() para que o campo hidden com o token seja criado automaticamente. Mas se você prefere montar os formulários de forma manual nas views, então é necessário gerar esses token e passá-los para cada view onde houver formulários, para que eles sejam adicionados a um campo do tipo hidden.

A geração dos tokens deve ser feita no controlador, usando uma chamada direta ou através de código reutilizável, ficando a seu critério definir o que melhor se encaixa no cenário da sua aplicação.

A seguir está um exemplo de código para geração do token onde o mesmo é enviado para a view e inserido em um <input type="hidden">:

<?php
// Gera o name e o hash para o campo hidden
$data['csrf'] = array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
);

// Passa os valores para a view
$this->load->view('view', $data);

?>

A seguir veja como adicionar os tokens a um campo hidden no formulário:

// View recuperando os tokens
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

Os tokens podem ser mantidos por toda a vida do cookie csrf, ou então serem gerados a cada submissão de formulário. Deixar que eles sejam gerados a cada submissão torna a segurança mais rigorosa, mas pode trazer problemas de usabilidade, como por exemplo:

  • ações assíncronas
  • navegação por abas

Para ativar a geração de tokens a cada submissão de formulário, você deve manter $config['csrf_regenerate'] como TRUE. Essa configuração encontra-se no arquivo application/config/config.php.

Ainda é possível definir um conjunto de URIs que não farão uso da proteção CSRF, e isso pode ser feito em $config['csrf_exclude_uris'], também no arquivo application/config/config.php.

É possível utilizar a URI objetiva ou então usar expressões regulares, como é feito nas rotas. Veja a seguir como configurar um conjunto de URIs para não serem protegidas:

<?php

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

$config['csrf_exclude_uris'] = array(
        'pessoa/[0-9]+',
        'registro/[a-z]+'
);

?>

Gostou da dica, então continue acompanhando, pois semanalmente temos novos conteúdos.

Bons Estudos!