Ir para conteúdo

Arquivado

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

Thiago Moreira

[Resolvido] Sistema de login seguro

Recommended Posts

Eu tenho o winrar.

Estou dizendo sobre o arquivo apenas tem um login sem extensao dai eu coloco .php e quando abro fica todo criptogrado nao da pra ler nada.Tava precisando de um login pra minha página e não consegui montar aki. :wacko:/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Esse código de login.php tem alguma vulnerabilidade:

<?php

 

// Inicia sessões

session_start();

 

// Conexão com o banco de bados

include("bdinc.php");

 

// Adicionamos uma função para verificar se o servidor executou addslashes() de forma

// transparente, senão executamos:

function checkslashes ( $valor)

{ if (

!

get_magic_quotes_gpc ())

{

return addslashes ( $valor);

} else {

return $valor;

}

}

 

// Recupera o nome

$nome = isset($_POST["nome"]) ? addslashes(trim($_POST["nome"])) : FALSE;

 

// Recupera a senha, a criptografando em MD5

$senha = isset($_POST["senha"]) ? base64_encode((trim($_POST["senha"]))) : FALSE;

 

// Usuário não forneceu a senha ou o nome

if(!$nome || !$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 nome é válido,

* caso 0, inválido.

*/

$SQL = "SELECT * FROM usuarios where nome = '". checkslashes($nome) ."'";

$result_id = pg_query($SQL) or die("Erro no banco de dados!");

$total = pg_num_rows($result_id);

 

// Caso o usuário tenha digitado um nome 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 = pg_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["codigo"];

$_SESSION["nome_usuario"] = $dados["nome"];

header("Location: logado.php");

exit;

}

// Senha inválida

else

{

echo "<html><body bgcolor=#E1E1E1>";

echo "<script language=JavaScript> window.alert('A senha está incorreta !'); </SCRIPT>";

echo "<script>window.location = 'index.php'</script>";

echo "</body></html>";

exit;

}

}

// nome inválido

else

{

echo "<html><body bgcolor=#E1E1E1>";

echo "<script language=JavaScript> window.alert('Usuários não encontrado !'); </SCRIPT>";

echo "<script>window.location = 'index.php'</script>";

echo "</body></html>";

exit;

}

?>

Um abraço.

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alissong...tem falha de xss (cross-site scripting) e cssf (cross-site session-forgery).

A de cssf,só "realmente funciona" se houver falha de xss,e no seu tem.

Dá uma filtrada nas tags html também cara.

Groove...tenta tirar esse trecho:

&& isset($_SESSION['dados'])

Fui!

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera tipo quando eu digita o nome da pagina na url ela acessa sem pedir o login, pq sera? ja to puxando o arquivo seguraca.php mais nao ta adiantando

vcs ja testaram ae , alguem teve o mesmo problema???

 

 

vlwsss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aê pessoal, aqui vai uma dicazinha (retirada da prova de certificação PHP da Zend)...

 

No código abaixo há muito texto, entre aspas duplas sem nada (variáveis, funções, etc) entre elas para que o servidor Apache faça uma interpretação do que está ali dentro (das aspas), veja:

 

<?php
define("SERVIDOR", "localhost");
define("USUARIO", "root");
define("SENHA", "");
define("BANCO", "sistemalogin");
?>

A questão é que, o uso desnecessário das aspas duplas, impacta na queda de desempenho da aplicação. No caso deste sistema do FAbyo apresentado no tópico não tem problema nenhum, pois ele é um sistema bem pequeno e leve, mas para quem é iniciante é bom já ir pegando essas maldades para quando forem desenvolver uma grande aplicação, já ficarem ligados quanto a isso. Sugestão:

 

<?php
define('SERVIDOR', 'localhost');
define('USUARIO', 'root');
define('SENHA', '');
define('BANCO', 'sistemalogin');
?>

Se quiserem saber mais sobre este assunto, sugiro estudarem o material de estudo da Zend, que é pago e está em inglês.

Neste tópico (http://forum.wmonline.com.br/lofiversion/index.php/t105404.html), por exemplo, tem tanta gente experiente (mas só no "tempo de casa" mesmo) falando besteiras... nusss.

 

 

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

Eu fiz como manda aí no link e sempre que faço o login ele sempre cai na pag de login. Como posso resolver isto?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera tipo quando eu digita o nome da pagina na url ela acessa sem pedir o login, pq sera? ja to puxando o arquivo seguraca.php mais nao ta adiantando

vcs ja testaram ae , alguem teve o mesmo problema???

 

 

vlwsss

Eu também estou com o mesmo problema e a página não está redirecionando.

Alguém pode nos ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

Comecei a pouco tempo em PHP, tentei compreender o codigo, e em algumas partes não tive problemas, mas, não consegui definir minha senha...

Como posso fazer isso?

Deve ser direto na tabela do SQL?

 

Desde já, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera... seguinte, estou tendo problemas com esse codigo =// quando eu faço o login, toda a vez ele retorna pra pagina de login, como se o usuario e senha estivesse errado, e ja conferi um monte de coisa, e nao estou axando o problema.... peguei o codigo do jeito que estava, apenas configurei o banco e as conexões. poderiam me dar uma luz =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, também estou iniciando com o php. Gostaria de saber impedir login simultaneo com o mesmo usuario e senha, mas no caso de usar o banco de dados e haver timeout, é possível finalizar a sessão fechando o navegador, sem que o usuario tenha que esperar o timeout para logar novamente?

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite,

 

Adorei o seu post, esta muito bem elaborado!

 

Agora pergunto, e a pagina de registo? Preciso que quando se registem, tenha estes dados:

 

-Username

-Password

-Nome_completo

-Morada

-Codigo_postal

-Telefone

-E-mail

-Morada confirmada(sim/nao)

-Telemovel confirmado(sim/nao)

 

 

Bem como na base de dados...Pode me ajudar?

;)/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, belo tuto, mto legal, mas eu gostaria de saber como faço pra por exemplo: o usuario logou e foi pra pagina restrita depois digamos que ele fechou o site sem deslogar eu queria que qndo ele voltar e clicar no link "login" ja verificasse se ele tem cookie e ja redireciona-se pra pagina restrita denovo sem precisar digitar login e senha novamente. alguem pode me ajudar?

 

agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve a todos!

Depois de muito tempo afastado do iMasters eu decidi dar um olho por aqui. Infelizmente eu voltei apenas para fazer uma correção ao post do amigo Fabyo

No arquivo seguranca.php esta assim:

<?php
 session_start();
 if(!isset($_COOKIE["dados"]) and !isset($_SESSION["dados"])){
 	header("Location: login.html");
 }
 ?>

enquanto o mais seguro é ser colocado assim:

<?php
 session_start();
 if(!isset($_COOKIE["dados"]) and !isset($_SESSION["dados"])){
 	header("Location: login.html");
 	header("Content-Length: 0");
	exit();
 }
 ?>

pois quando apenas o Location é adicionado nao garante que a pagina nao continuara o carregamento, por exemplo:

no Firefox eu posso digitar na barra de endereços "about:config" e ele abrira as configuracoes gerais do navegador, e se eu modificar o valor da propriedade "network.http.redirection-limit" de 20 para 0, e usando o complemento Web Developer, eu posso fazer com que o header "Location" seja ignorado apenas e ele vai continuar a carregar o restante da pagina. Entao eu devo setar o Content-Length para 0 e interromper explicitamente a execução com o comando exit().

 

Os navegadores funcionam assim:

quando terminam de receber os headers (ou seja, na presença de duas linhas vazias consecutivas) ele analizam o seu conteudo e, dentre outras coisas, se o header Location estiver presente a nova localizaçao é aberta, e assim o navegador interrompe o fluxo de dados com o servidor para poder ser recirecionado para outro lugar. Porem existe como fazer os navegadores nao redirecionarem ao encontrar o header Location, entao nao se deve contar apenas com isso, é quase obrigatorio colocar o exit() depois de um Location, porem, o Content-Length nao é obrigatorio mais tambem indica que o corpo é vazio, coisa que normalmente o PHP já envia ao ver que o buffer esta vazio, porem é bom fazer as coisas de forma explicita.

 

Bem... depois de tanto tempo afastado do PHP e do iMasters é bom ver que a comunidade ainda esta bem ativa

porem é triste ver que as pessoas continuam a nao ler as regras antes de usar o forum

Bem... é isso aew...

[]'s a todos.

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.