Ir para conteúdo
Rodrigo Ferreira Santos

Ajuda com controle de acesso por autenticaçao

Recommended Posts

Ola amigos , estou começando no php e por esse dias fiz uma sistema bem simples para um determinado controle interno da empresa mas agora preciso restringir o acesso a ele por autenticação , e andei lendo alguns tutoriais e ate modelos mas nao estou conseguindo fazer corretamente , li também que uma boa pratica e mudar os dados da sessão mas não tenho ideia de por onde começar , por hora alguem poderia me indicar um modelo simples, um tutorial ou modelo eu testei um da dev midia mas nao fuciona, assim com um modelo que alguem ja tenha usado para eu poder começar e depois eu ir postando aqui as duvidas , conto com a ajuda de voce obrigado !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores eu estou seguindo um tutorial da devmedia da seguinte forma :

 

Arquivo de conexao com a base e configuraçao  

 

Arquivo de login login.php:

<div class="space-6"></div>
	<div class="position-relative">
			<div id="login-box" class="login-box visible widget-box no-border">
				<div class="widget-body">
					<div class="widget-main">
					<h4 class="header blue lighter bigger">
					<i class="ace-icon fa fa-coffee green"></i>
					Por favor digite seus dados!
					</h4>
						<div class="space-6"></div>
							<form action="login_valida.php" method="post">
							<fieldset>
							<label class="block clearfix">
							<span class="block input-icon input-icon-right">
							<input type="text" class="form-control" name="login" placeholder="Usuário" />
							<i class="ace-icon fa fa-user"></i>
							</span>
							</label>
								<label class="block clearfix">
									<span class="block input-icon input-icon-right">
									<input type="password" class="form-control" name="password" placeholder="Senha" />
									<i class="ace-icon fa fa-lock"></i>
									</span>
								</label>
							<div class="space"></div>
								<div class="clearfix">
									<label class="inline">
									<input type="checkbox" class="ace" />
									<span class="lbl"> Lembrar</span>
									</label>
                                     <button type="submit" class="width-35 pull-right btn btn-sm btn-primary">
										<i class="ace-icon fa fa-key"></i>
										<span class="bigger-110">Entrar</span>
									 </button>
								</div>
								<div class="space-4"></div>
							</fieldset>
                      </form>

login_valida.php no arquivo de autenticação esta assim :

<?php 
// Conexão com o banco de dados 
require "comum.php"; 

// Inicia sessões 
session_start(); 

// Recupera o login 
$login = isset($_POST["login"]) ? addslashes(trim($_POST["login"])) : FALSE; 
// Recupera a senha, a criptografando em MD5 
$senha = isset($_POST["senha"]) ? md5(trim($_POST["senha"])) : FALSE; 

// Usuário não forneceu a senha ou o login 
if(!$login || !$senha) 
{ 
echo "Você deve digitar sua senha e login!"; 
exit; 
} 

/** 
* Executa a consulta no banco de dados. 
* Caso o número de linhas retornadas seja 1 o login é válido, 
* caso 0, inválido. 
*/ 
$SQL = "SELECT id, nome, login, senha, postar 
FROM aut_usuarios 
WHERE login = "" . $login . """; 
$result_id = @mysql_query($SQL) or die("Erro no banco de dados!"); 
$total = @mysql_num_rows($result_id); 

// Caso o usuário tenha digitado um login válido o número de linhas será 1.. 
if($total) 
{ 
// Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão 
$dados = @mysql_fetch_array($result_id); 

// Agora verifica a senha 
if(!strcmp($senha, $dados["senha"])) 
{ 
// TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário 
$_SESSION["id_usuario"]= $dados["id"]; 
$_SESSION["nome_usuario"] = stripslashes($dados["nome"]); 
$_SESSION["permissao"]= $dados["postar"]; 
header("Location: index.php"); 
exit; 
} 
// Senha inválida 
else 
{ 
echo "Senha inválida!"; 
exit; 
} 
} 
// Login inválido 
else 
{ 
echo "O login fornecido por você é inexistente!"; 
exit; 
} 
?>

e esse e o script que verifica se tem uma sessao aberta para cada usuario :

<?php 
// Inicia sessões 
session_start(); 

// Verifica se existe os dados da sessão de login 
if(!isset($_SESSION["id_usuario"]) || !isset($_SESSION["nome_usuario"])) 
{ 
// Usuário não logado! Redireciona para a página de login 
header("Location: login.html"); 
exit; 
} 
?> 

 

Preciso da ajuda de vocês nas seguintes duvidas e caso nao tenha como explicar aqui pode mandar somente um tutorial ou matéria da internet que eu leio.

Primeira eu queria colocar a autenticação e a validação em um so aquivo,  eu li que e feito com um action mas não tenho ideia de como fazer , outra coisa e eu queria mudar o nome da sessão para aumentar a segurança, colocar um limite de tempo também !

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Vamos à alguns pontos.

 

Autenticação

 

MD5 foi amplamente divulgado como hash criptográfico para autenticação, mas não é nem um pouco seguro. Existe o post abaixo que pode tirar todas as suas dúvidas:

Tempo de sessão

 

Você pode fazer de duas formas. Configurando o PHP/Apache ou criando um script para isso. Em meu anos de experiência, a segunda opção foi sempre a mais viável e assertiva.

 

No link abaixo há ambas.

https://stackoverflow.com/a/8311400/1628790

 

Separação ou um arquivo só

 

Em 05/04/2018 at 09:08, Rodrigo Ferreira Santos disse:

[...]eu queria colocar a autenticação e a validação em um so aquivo,  eu li que e feito com um action mas não tenho ideia de como fazer[...]

 

 

Actions é um método do controller que é acionado/chamado através de uma requisição. Ou seja, o usuário acessa uma URL (link, botão, escreveu na barra de endereços, etc..), um front controller (uma classe, ou conjunto de classes que interpreta requisições) receberá a requisição e enviará para o método correto de algum controller. Esse método é o action.

 

No seu caso, eu verifiquei que é um arquivo para realizar a autenticação e outro para verificar se o usuário está logado. Se não for usar orientação à objetos, do jeito que está fica mais interessante.

 

Funções MySQL

Funções MySQL foram descontinuadas no PHP 5.5 e removidas no PHP 7. Utilize MySQLi ou PDO:

http://rberaldo.com.br/como-atualizar-php-mysql-mysqli/

http://rberaldo.com.br/pdo-mysql/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por MasterJ
      nao consigo encontrar o erro neste codigo

       
      <?php  if(isset($_POST['btnLogin'])){   $email = trim($_POST['user_email']);   $upass  = trim($_POST['user_pass']);   $h_upass = sha1($upass);       if ($email == '' OR $upass == '') {       message("Invalid Username and Password!", "error");       redirect("login.php");               } else {     //it creates a new objects of member     $user = new User();     //make use of the static function, and we passed to parameters     $res = $user::userAuthentication($email, $h_upass);     if ($res==true) {         message("You logon as ".$_SESSION['ROLE'].".","success");       if ($_SESSION['ROLE']=='Administrator' || $_SESSION['ROLE']=='Student'){         $_SESSION['ADMIN_USERID'] = $_SESSION['USERID'];         $_SESSION['ADMIN_FULLNAME'] = $_SESSION['FULLNAME'] ;         $_SESSION['ADMIN_USERNAME'] =$_SESSION['USERNAME'];         $_SESSION['ADMIN_ROLE'] = $_SESSION['ROLE'];         unset( $_SESSION['USERID'] );         unset( $_SESSION['FULLNAME'] );         unset( $_SESSION['USERNAME'] );         unset( $_SESSION['PASS'] );         unset( $_SESSION['ROLE'] );          redirect(WEB_ROOT."admin/index.php");       }      }else{       message("Account does not exist! Please contact Administrator.", "error");        redirect(WEB_ROOT."admin/login.php");      }  }  }   ?>   
    • Por JoaoVituBR
      Olá, eu tenho 2 servidores (Socket.io Redis) comunicando entre si, e gostaria de saber se tem como, e como posso fazer que salve a sessão para que o usuário quando conectar no outro servidor ele não precise fazer login novamente.

    • Por PeeWee
      Pessoal, estou precisando de um código que mantenha o usuário logado no sistema, pois o interessante é que assim que ele acessar o site nao precise logar outra vez. Estou utilizando esse código:   $_SESSION['log_me_out_at'] = strtotime(date("Ymd ")."23:59:59");
      aparentemente nao funciona quando subi para o servidor, alguem tem uma dica?
    • Por Keron
      Gente eu não estou conseguindo iniciar o session em php e realmente não consigo entender o motivo já tentei trocentas coisas que as pessoas sugeriram nos foruns, mas o session ainda assim não funciona

       
      arquivo index onde não recupera variáveis $_SESSION:
      <?php session_start(); ?> <!DOCTYPE html> <html> <head> <title>Pagina1</title> <link rel="stylesheet" href="css/style.css"/> </head> <body> <article id="newPrincipal"> <h1>Usuário id:<?php echo $_SESSION['userId']; ?></h1> </article> <h1>Result:<?php echo "Usuário id:".$_SESSION['userId']; ?></h1> </body> </html> <?php echo '<pre>'; print_r($_SESSION['userId']); echo '</pre>'; arquivo login:
       
      <?php if(isset($_POST['login-submit'])){ require 'dbh.inc.php'; $users = $_POST['nome']; $mailuid = $_POST['mailuid']; $password = $_POST['pwd']; $token; if(empty($mailuid) || empty($password)){ header("Location: ../header.php=emptyfields"); exit(); } else{ $sql = "SELECT * FROM users WHERE Usuarios=? AND email=?"; $stmt = mysqli_stmt_init($conn); if(!mysqli_stmt_prepare($stmt, $sql)){ header("Location: ../index.php?error=sqlerror"); exit(); } else{ mysqli_stmt_bind_param($stmt, "ss", $mailuid, $users); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if($row = mysqli_fetch_assoc($result)){ $pwdCheck = password_verify($password, $row['pwdUsers']); if($pwdCheck == false){ header("Location: ../header.php?error=wrongpwd"); exit(); } else if($pwdCheck == true){ session_start(); $_SESSION['userId'] = $row['idUsers']; $_SESSION['userId2'] = $row['uidUsers']; $_SESSION['email'] = $row['emailUsers']; header("Location: ../index.php?login=".$_SESSION['userId']); } else{ header("Location: ../login.php?error=wrongpwd"); exit(); } } } } } else{ header("Location: ../index.php"); }  
      Eu tentei de todas as formas recuperar alguma informação usando o $_SESSION no arquivo index, mas não consegui
      Estou beirando o desespero, xoxo
       
                                                         
    • Por MachineMan
      com os dados já inseridos. Por favor. é só para um site de um trabalho da escola, então não precisa de MySqL, encontrei alguns, mas não funcionam, não sei o motivo.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.