INTRODUÇÃO
Sistema kernel do SCDU
No SCDU, o cabeçalho muda conforme o tipo de arquivo. MODELO 1 é para API/endpoint: ele bloqueia acesso direto quando o arquivo não foi chamado pelo fluxo correto.
MODELO 1
<?php
declare(strict_types=1);
if (!defined('MODO_AUTORIZADO')) {
http_response_code(403);
die('403');
}
?>
MODELO 2 é para páginas internas: ele define a entrada autorizada, carrega o init.php e então aplica
a Camada de Autenticação do SCDU.
MODELO 2
<?php
declare(strict_types=1);
if (!defined('MODO_AUTORIZADO')) {
define('MODO_AUTORIZADO', true);
}
?>
A espinha dorsal do SCDU é o init.php, que fica fora da pasta pública.
Ele carrega as configurações e as classes do sistema. Considerando que a página
welcome.php está em /public_html/scdu/, qual caminho do
require_once está correto?
CABEÇALHO 1
<?php
if (!defined('MODO_AUTORIZADO')) { define('MODO_AUTORIZADO', true); }
require_once __DIR__ . '/../../app/env/init.php';
\app\env\Auth_System::guard();
?>
CABEÇALHO 2
<?php
if (!defined('MODO_AUTORIZADO')) { define('MODO_AUTORIZADO', true); }
require_once __DIR__ . '/../app/env/init.php';
\app\env\Auth_System::guard();
?>
INTRODUÇÃO AO AUTH_SYSTEM
No exemplo anterior, é possível ver a Camada de Autenticação do SCDU na linha 4:
\app\env\Auth_System::guard();
Para entender como ela funciona, é preciso entender como o SCDU libera ou restringe o acesso
a um arquivo ou diretório.
No SCDU, todo cadastro começa com scdu=0. Esse valor significa “pendente”:
enquanto o cadastro não for confirmado (por e-mail), o usuário não é considerado membro.
Quando o cadastro é confirmado, o sistema altera o nível para scdu=1, que é o nível
básico de membro.
No login, o SCDU valida o usuário, busca o nível scdu no banco e grava esse nível na sessão.
Antes disso, a sessão antiga (visitante) é destruída. Em logout ou por inatividade, a sessão
também é destruída e o navegador volta ao estado de visitante (sessão sem SCDU).
Por isso, quando alguém está logado no SCDU, a sessão já contém scdu=1 (membro básico)
ou um valor maior (quando o administrador promove).
Com isso, ao entrar em uma área protegida, a Camada de Autenticação
\app\env\Auth_System::guard();
verifica se existe uma sessão autenticada. Se não existir sessão válida, o acesso é bloqueado.
Se existir sessão válida, o acesso passa a depender do nível mínimo exigido pela área.
Atenção (segurança): scdu=1 não é nível de administração.
Níveis administrativos (por exemplo, scdu=7) devem ser reservados e atribuídos somente pelo
administrador. Se alguém configurar uma área administrativa como “nível 1”, qualquer membro confirmado
poderá acessar essa área.
Barreira extra de login
Mesmo após a Camada de Autenticação \app\env\Auth_System::guard();, o SCDU ainda pode aplicar
uma barreira extra: conferir explicitamente se a sessão marca o usuário como logado. Se essa marca não existir,
o sistema interrompe a execução e redireciona para o login com a mensagem de sessão expirada.
<?php
// Garante que o usuário esteja logado (barreira extra)
if (!Tools_Session::get('usuario_logado')) {
header('Location: /tools/lib/login.php?status=error&msg=sessao_expirada');
exit;
}
?>
Validação defensiva do scdu
Em seguida, o SCDU lê o nível scdu da sessão e valida se ele está dentro da faixa esperada.
Essa checagem é “defensiva” porque trata qualquer valor fora do padrão como sinal de sessão inválida ou corrompida.
Se o nível estiver fora da faixa (< 0 ou > 8), o SCDU destrói a sessão e força o retorno ao login,
evitando que um estado anormal continue navegando pelo sistema.
<?php
$scdu = (int) Tools_Session::get('scdu');
// Segurança defensiva: faixa válida do SCDU
if ($scdu < 0 || $scdu > 8) {
Tools_Session::destroy();
header('Location: /tools/lib/login.php?status=error&msg=scdu_invalido');
exit;
}
?>
Encerramos por aqui: com a autenticação, a barreira extra e a validação defensiva do scdu,
a base de segurança fica pronta para o próximo passo (nível mínimo por área, sis_memoria e regras).