Jack Oliveira 1 Denunciar post Postado Dezembro 10, 2019 Ola @Omar~ e @Motta fiz um sistema de permissao por paginas no caso em meu banco de dados tenho mais de 20 paginas no admin eu tenho os seguinte nivel de acessos WebMaster - Nivel (1) Administrador - Nivel (2) Editor - (3) E o código fiz da seguinte forma no function.php // Verifica se o usuário tem permissão para acessar o módulo function VerificaPermissao($URL){ $IDUsuario = DadosSession('id'); $Query = DBRead('usuarios','permissao',"WHERE id = '{$IDUsuario}'"); foreach ($Query as $usuarios) { $ModulosPermitidos = $usuarios['permissao']; if (empty($ModulosPermitidos)) { return true; } elseif (!empty($ModulosPermitidos)) { if (strpos($ModulosPermitidos, $URL) !== TRUE) { return true; } else { return false; } } } } ele funciona de boa ao dar permissao porem se um cara muito legal ele ter acesso por ex meusite.com/admin/post.php se ele ir e trocar o post.php por meusite.com/admin/album.php ele consegue acessar a pagina que não é pra ele acessar. Alguem ai poderia me dar uma ajuda ai de como resolver... Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Dezembro 10, 2019 É muito simples, basta fazer um verificação em cada página(ou arquivo "depende a arquitetura") se aquele usuário tem permissão de acesso. Só uma coisa diria a você que mudasse.... Criar uma tabela só de permissão; digamos então que essa seria a tabela: CREATE TABLE `permitir` ( `id` int(9) NOT NULL AUTO_INCREMENT, `usuario_id` int(9) NOT NULL AUTO_INCREMENT COMMENT 'adicionamos aqui o id do usuario que pode acessar a página', `pagina` varchar(200) DEFAULT NULL COMMENT 'adicionamos aqui a informação da página que ele pode acessar', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Então nossa query fica muito prática SELECT * FROM permitir WHERE usuario_id = '{$ID_DO_USUARIO}' AND pagina = '{$URL}' Então é só verificar isso a cada página ou arquivo que o usuário acessar. Se não há retorno da query é porque aquele id do usuário não está registrado na tabela ou seu id não condiz com a página que ele acessou junto ao valor da tabela na coluna "pagina". Citar Uma ressalva: Sessões/cookies podem ser fraudados, logo a consulta do usuário pelo lado do servidor assim como fez é uma medida de segurança bem drástica, mas necessário em alguns casos extremos. No entanto a verificação por ID não é a ideal, se por sua vez além do próprio usuário ter acesso ao seu ID, ou seja se todo mundo pode saber qual o ID do administrador por exemplo, basta uma pessoa falsificar isso e terá acesso administrativo. Outro caso é que normalmente o "ID 1" é o administrador. Compartilhar este post Link para o post Compartilhar em outros sites
Jack Oliveira 1 Denunciar post Postado Dezembro 26, 2019 Em 10/12/2019 at 15:40, Omar~ disse: É muito simples, basta fazer um verificação em cada página(ou arquivo "depende a arquitetura") se aquele usuário tem permissão de acesso. Só uma coisa diria a você que mudasse.... Criar uma tabela só de permissão; digamos então que essa seria a tabela: CREATE TABLE `permitir` ( `id` int(9) NOT NULL AUTO_INCREMENT, `usuario_id` int(9) NOT NULL AUTO_INCREMENT COMMENT 'adicionamos aqui o id do usuario que pode acessar a página', `pagina` varchar(200) DEFAULT NULL COMMENT 'adicionamos aqui a informação da página que ele pode acessar', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Então nossa query fica muito prática SELECT * FROM permitir WHERE usuario_id = '{$ID_DO_USUARIO}' AND pagina = '{$URL}' Então é só verificar isso a cada página ou arquivo que o usuário acessar. Se não há retorno da query é porque aquele id do usuário não está registrado na tabela ou seu id não condiz com a página que ele acessou junto ao valor da tabela na coluna "pagina". Ola @Omar~ bom dia perdoa a demora aqui poderia me dar uma ajuda nesta parte que tu disse aqui em questão de segurança como posso proteger o administrador?? Compartilhar este post Link para o post Compartilhar em outros sites