Garantir a segurança da aplicação é essencial, principalmente quando há uma área administrativa onde usuários autenticados podem gerenciar conteúdos sensíveis. Neste post, vamos implementar melhorias no controle de acessos e reforçar a proteção do sistema.
Protegendo a Área Administrativa com Middleware
Já utilizamos um filtro para restringir o acesso à área administrativa. No entanto, podemos reforçar esse controle criando um middleware personalizado. No diretório app/Filters/, crie um arquivo chamado AuthFilter.php:
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
if (!session()->get('usuario_logado')) {
return redirect()->to('/login')->with('erro', 'Você precisa estar logado para acessar esta página.');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Nenhuma ação necessária após a requisição
}
}
Agora registramos esse filtro no arquivo app/Config/Filters.php:
public $filters = [
'auth' => ['before' => ['admin/*']],
];
Isso garante que todas as rotas dentro do grupo /admin exijam autenticação.
Implementando Controle de Permissões
Nem todos os usuários administrativos devem ter o mesmo nível de acesso. Para implementar um sistema de permissões, adicionamos uma coluna role à tabela de usuários.
Crie uma nova migration:
php spark migrate:create AddRoleToUsers
Edite o arquivo gerado em app/Database/Migrations/ e adicione:
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class AddRoleToUsers extends Migration
{
public function up()
{
$this->forge->addColumn('usuarios', [
'role' => ['type' => 'ENUM', 'constraint' => ['admin', 'editor'], 'default' => 'editor'],
]);
}
public function down()
{
$this->forge->dropColumn('usuarios', 'role');
}
}
Execute a migração:
php spark migrate
Agora, no AuthFilter.php, podemos verificar permissões:
if (session()->get('usuario_role') !== 'admin') {
return redirect()->to('/')->with('erro', 'Acesso negado.');
}
Protegendo Ações Sensíveis com CSRF
O CodeIgniter 4 protege formulários contra CSRF (Cross-Site Request Forgery) automaticamente. Para garantir que todas as requisições POST sejam seguras, ative essa proteção no app/Config/App.php:
public $CSRFProtection = true;
Nos formulários, adicione csrf_field() para gerar o token CSRF:
if (password_verify($senhaDigitada, $usuario['senha'])) {
session()->set('usuario_logado', $usuario['id']);
}
Conclusão
Com essas melhorias, nossa aplicação está mais protegida contra acessos indevidos e ataques comuns. No próximo post, podemos aprofundar mais sobre logs de segurança e auditoria no CodeIgniter 4.
Se você ou sua empresa precisa de suporte para reforçar a segurança do seu projeto com CodeIgniter 4, a Saldaris Consultoria pode ajudar. Entre em contato pelo formulário no final da página para saber mais sobre nossos serviços.