Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo.RFS

Autenticação de usuário/senha

Recommended Posts

Fala galera beleza?

 

Depois de muita batalha com o sistema do Fabyo e eu não ter conseguido fazer funcionar. Adaptei o sistema dele com os recursos de um que eu tinha que funcionava através de cookie.

 

Aproveitando para dar uma dica para diagramação/layout com include/require.

 

Vamos as pastas.

 

/

/template

/template/css

/template/flash

/template/img

/template/js

/galeria

 

 

Vamos as páginas.

 

index.php

<html><head><title>TITULO</title>	<meta name="author" content="Floriano Comunicação Integrada - http://www.floriano.ppg.br" />	<link href="template/css/index.css" rel="stylesheet" type="text/css"></head><body><?php	if ($login == "0")	{ echo	"<p>$data</p>	<p> </p>"; }	else	{ echo	"<p>$data</p>	<p class='titulo_loginerro'>Login ou senha incorreto!</p>"; }				?><form name="login" method="post" action="aut.login.php"><p><input tabindex='1' name='USER_LOGIN' type='text' value='digite seu login' size='24' maxlength='12'><input tabindex='3' name='Entrar' type='submit'></p><p><input tabindex='2' name='USER_PWD' type='password' value='senha' size='23' maxlength='12'></p></body></html>
aut.login.php

<?php// Anti sql injectionfunction anti_injection($txt) {	$txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt;	return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); }require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) {	$return_aut = mysql_query("select count(*) as total from tb_user where 					USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')");		setcookie("USER_LOGIN",$USER_LOGIN);	setcookie("USER_PWD",$USER_PWD);		$total = mysql_result($return_aut, 0, "total");	mysql_close();	if($total != 1) {		header("Location: index.php?login=erro"); // Redirecionamento em caso de erro		exit;	}}$USER_LOGIN = isset($_POST["USER_LOGIN"]) ? anti_injection($_POST["USER_LOGIN"]) : "";$USER_PWD = isset($_POST["USER_PWD"]) ? anti_injection($_POST["USER_PWD"]) : "";verifica_usuario($USER_LOGIN, $USER_PWD);echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.autenticado.php'>"; // Redirecionamento em caso de sucesso?>
inc.php

<?require_once('aut.valida.php');require_once('inc.conectdb.php');?>
inc.conectdb.php

<?php// Conexão com o Banco de Dados$dbhost	= "localhost";$dbname	= "nomedobanco";$dbuser	= "usuario";$dbpwd	= "senha";$conect_db = 	mysql_connect($dbhost, $dbuser, $dbpwd)					or die("Não foi possível conectar ao servidor");					mysql_select_db($dbname)					or die("Não foi possível selecionar o banco de dados");?>
aut.valida.php

<?if(IsSet($_COOKIE["USER_LOGIN"])) $USER_LOGIN = $_COOKIE["USER_LOGIN"];if(IsSet($_COOKIE["USER_PWD"])) $USER_PWD = $_COOKIE["USER_PWD"];	require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) {	$return_aut = mysql_query("select count(*) as total from tb_user where 					USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')");		$total = mysql_result($return_aut, 0, "total");		if($total != 1) {		echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro		exit;	}}verifica_usuario($USER_LOGIN, $USER_PWD);?>
index.autenticado.php

<!-- Layout Ini --><?php require_once('template/inc.layini.php'); ?> <!-- Fim Layout Ini -->	<p>Funciono perfeito!</p><!-- Layout Fim --><?php require_once('template/inc.layfim.php'); ?><!-- Fim Layout Fim -->
template/inc.layini.php

<?php require_once('inc.php'); ?><html><head><title>TITULO</title>	<link href="template/css/estilos.css" rel="stylesheet" type="text/css">		<?php include('inc.metas.php'); ?></head><body>
template/inc.layfim.php

</body></html>
A dica que tentei deixar acima para o layout é:

Fazer dois arquivos (layini e layfim) que contenham todas as informações que ficam em todas as páginas, bem como titulo, folha de estilo e etc, assim quando precisar apenas alterar o titulo do site você possa apenas alterar uma página. Sei que é bem comum esta utilização, mas como nem todo mundo sabe e dificilmente vejo dicas para pessoas realmente principiantes.

 

Bom eu não sei até que ponto este sistema é seguro, isto os moderadores/experts aqui poderiam nos dizer.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou dar uns toques que precisa mudar para melhorar a segurança e inclusive erros

 

index.php

 

nessa parte que esta assim ta errado:

 

<?php
if ($login == "0")
{ echo	"<p>$data</p>
<p> </p>"; }
else
{ echo	"<p>$data</p>
<p class='titulo_loginerro'>Login ou senha incorreto!</p>"; }
			?>

 

nao existe $login e nem $data, entao ira dar erro nessa pagina.

outra coisa nao se testa dessa maneira voce precisa usar isset()

 

e voce precisa fazer uma validação melhor para saber se o usuario ta logado.

 

e parece que voce esta programando com register_globals = on isso deixa o sistema totalmente inseguro, o register_globals é para ficar em off

 

inc.conectdb.php

nessa pagina voce só esta incluindo ela, mas uma conexao com o banco voce tem que tratar com mais cuidado, e só abra a conexao na hora que for usar e feche em seguida.

 

aut.login.php

 

voce esta criando o cookie antes mesmo de saber se o usuario tem permissao

 

da uma revisao geral e trabalhe com :

registe_globals = off

display_errors = on

error_reporting = E_ALL

Compartilhar este post


Link para o post
Compartilhar em outros sites

na pagina inc.php eu tinho um include para:

 

config.php

<?php// Loginif(isset($_GET['login'])){ $login = $_GET['login']; } else { $login = 0; }	// Data em português$semeng = date("l"); switch($semeng){case "Monday":			$sem = "Segunda-Feira";		break; case "Tuesday":		$sem = "Terça-Feira";		break; case "Wednesday":		$sem = "Quarta-Feira";		break; case "Thursday":		$sem = "Quinta-Feira";		break; case "Friday":			$sem = "Sexta-Feira";		break; case "Saturday":		$sem = "Sábado";			break; case "Sunday":			$sem = "Domingo";			break; }$dia = (date("d"));$meseng = date("n"); switch($meseng) {case "1":		$mes = "Janeiro";		break; case "2":		$mes = "Fevereiro";		break; case "3":		$mes = "Março";		break; case "4":		$mes = "Abril";		break; case "5":		$mes = "Maio";			break; case "6":		$mes = "Junho";		break; case "7":		$mes = "Julho";		break; case "8":		$mes = "Agosto";		break; case "9":		$mes = "Setembro";		break; case "10":	$mes = "Outubro";		break;case "11":	$mes = "Novembro";		break; case "12":	$mes = "Dezembro";		break; } $ano = (date("Y"));$data = "$sem, $dia de $mes de $ano";	// colocar data no Banco de dados em Português		$datadb_eng = date("Y-m-d");	$databg_br = substr($datadb_eng,8,2) . "/" .substr($datadb_eng,5,2) . "/" . substr($datadb_eng,0,4);?>
ai funcionaria o IF com o $data e $login

 

geralmente eu fecho a conexão no layfim.php, assim eu não preciso fica toda hora abrindo e fechando a conexão a cada select...

 

meu register_globlas já estava em off e continua funcionando?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que voce postou sem o include deu a entender que voce nao tava usando nada para receber $login nem a $data, nao vou adivinhar que existe um include que voce nao mostrou

 

mas sobre o resto seu login continua confuso e a validação do usuario logado precisa melhorar

Compartilhar este post


Link para o post
Compartilhar em outros sites

tmferreira da um help ai no aut.valida.php quebrando uma floresta, nem é um galho hehehevaleu pelas dicas acima, ja tinha visto aqui no forum mas nao tinha mudado no meus codigos de modelo... :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo.RFS só você mudar ali na hora de testar se o usuario existe no banco você testa a $total se retornar você cria os coookie senao você nao cria, do jeito que você fez você ta criando antes de saber se ele existe

 

e no valida basta você testar se o cookie existe que ja é seguro e valido.

 

nao precisa toda vez que o usuario acessar uma pagina você acessar o banco e refazer a pesquisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é valido eu fecha a conexão com o banco apenas no final da pagina?

 

aut.login.php

<?php// Anti sql injectionfunction anti_injection($txt) {	$txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt;	return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); }require_once('inc.conectdb.php');function verifica_usuario($USER_LOGIN, $USER_PWD) {	$return_aut = mysql_query("select count(*) as total from tb_user where 					USER_LOGIN = '$USER_LOGIN' and USER_PWD = md5('$USER_PWD')");		$total = mysql_result($return_aut, 0, "total");	if($total == 1) {	setcookie("USER_LOGIN",$USER_LOGIN);	setcookie("USER_PWD",$USER_PWD);	} else {	header("Location: index.php?login=erro"); // Redirecionamento em caso de erro	exit;	}}$USER_LOGIN = isset($_POST["USER_LOGIN"]) ? anti_injection($_POST["USER_LOGIN"]) : "";$USER_PWD = isset($_POST["USER_PWD"]) ? anti_injection($_POST["USER_PWD"]) : "";verifica_usuario($USER_LOGIN, $USER_PWD);/* Log------------------------------------------------------------------------------------*/$query = mysql_query("SELECT USER_ID FROM tb_user WHERE USER_LOGIN='$USER_LOGIN'");$result = mysql_fetch_array($query); $USER_ID = $result["USER_ID"];$LOG_DATA = date("Y-m-d H:i:s");$LOG_ACAO = "Logon";$LOG_IP = getenv("REMOTE_ADDR");$LOG_INSERT = "INSERT INTO tb_log (USER_ID, LOG_IP, LOG_ACAO, LOG_DATA)		VALUES ('$USER_ID', '$LOG_IP', '$LOG_ACAO', '$LOG_DATA')";$LOG_INSERT = mysql_query($LOG_INSERT); /*------------------------------------------------------------------------------------*/mysql_close();echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.autenticado.php'>"; // Redirecionamento em caso de sucesso?>

aut.valida.php

<?if(IsSet($_COOKIE["USER_LOGIN"])){	$USER_LOGIN = $_COOKIE["USER_LOGIN"];} else {	echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro	exit;}if(IsSet($_COOKIE["USER_PWD"])){	$USER_PWD = $_COOKIE["USER_PWD"];} else {	echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro	exit;}?>

alterado o if do index para:

$msg = $login == "0" ? "> " : " class='titulo_loginerro'>Login ou senha incorreto!";echo "<p>$data</p>";echo "<p$msg</p>";
ta ficando joia o negocio hehehe

 

valeu pela ajuda até agora!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for para fechar a conexao no final da pagina nem precisa fechar pois o php ja fecha a conexao assim que o script é encerrado, mas o melhor para sites de muitas conexao simutanea é abrir e fechar só na hora que for usar.

e sobre o register_globals era só aquilo mesmo que voce nao tinha incluido o arquivo

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse anti inject eu copiei literalmente do que o fabyo tinha feito no sistema de login dele...

 

no log eu gravei o ID pq as vezes pode ocorre mudança no login, muito raro, mas...

 

esse negocio de bloqueio é uma ideia interessente, acho q vi aqui no forum alguma coisa quanto a bloqueio, vo ver se consigo adapta :P

 

nunca isei AND no IF, como funcionaria?

 

valeu tmferreira

 

Achei no google o AND hehehe

 

<?if(IsSet($_COOKIE["USER_LOGIN"]) || IsSet($_COOKIE["USER_PWD"])){	$USER_LOGIN = $_COOKIE["USER_LOGIN"];	$USER_PWD = $_COOKIE["USER_PWD"];} else {	echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro	exit;}?>

usei esta META pq o Header deixa na barra de endereços a página original, parecendo como um include e o meta ele literalmente redireciona o user a página indicada. :D

 

como faço pra faze um logoff no cookie quando o site for fechado e/ou atraves de link?

Compartilhar este post


Link para o post
Compartilhar em outros sites

soh lembrando q se você usa || significa OU e para ser E, use &&

Achei no google o AND hehehe

<?if(IsSet($_COOKIE["USER_LOGIN"]) || IsSet($_COOKIE["USER_PWD"])){	$USER_LOGIN = $_COOKIE["USER_LOGIN"];	$USER_PWD = $_COOKIE["USER_PWD"];} else {	echo "<META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php?login=erro'>"; // Redirecionamento em caso de erro	exit;}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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