Ir para conteúdo

POWERED BY:

Arquivado

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

flaviasam

Cadastrar senha em md5 ou sha1

Recommended Posts

Oi. no cadastro que tenho, eu cadastro as senhas no formato normal. então sem codificação alguma, por um lado me facilita, pois uso o recuperar senha, mas acho muito vulnerável. Como faço para cadastrar em md5 ou sha1? Seria o mesmo procedimento para ambos também?

 

No inserir ele está assim:

 

$_POST[form_login]','$_POST[form_senha]'

 

Já na edição ele está assim:

 

login='$_POST[form_login]',senha='$_POST[form_senha]'

 

Depois terei de fazer um redefinir senha, já que o recuperar não terá mais como ser usado trocando para md5 ou sha1

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só gerar o hash ao salvar no banco.

Na hora do login, gere o hash da senha digitada e o compare com o hash do banco

 

Mais detalhes neste artigo:

http://blog.ultimatephp.com.br/sistema-de-login-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah isso é bem simples, e outra md5 não é seguro, qualquer programa besta vai conseguir quebrar suas senhas..

 

E que forma de programar é essa?

login='$_POST[form_login]',senha='$_POST[form_senha]'

Desculpa pela forma de falar mas seria bom você ler o que Beraldo te mandou lá no link, eu aprendi muito com ele.

 

Nós queremos te passar a melhor forma possível do php..

Depois de você ler e comparar o que está fazendo vai ver que melhorar a segurança de seu

sistema vale muito a pena, isso por que ainda não teve a sorte de algum engraçado tentar algo nele.

 

Existe funções prontas que usar uma key para gerar a senha com encrypt única do seu sistema..

 

Qualquer coisa eu te mando a função por PM. marque o tópico como resolvido :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, esse cadastro que tenho vai ser trocado, então vai ficar como backup por uns tempos. Ele já está depreciado e não há interesse de fazer grandes melhorias nele. Então mudar todo o sistema que já vai ficar em desuso não da. Pedi uma coisa. Infelizmente aqui você pedi uma coisa e te mandam coisas que não estão nas suas necessidades..

 

Vale a dica sempre, mas sempre tem que focar na necessidade que a pessoa precisa. Estou precisando de algo mínimo para algo que não quero fazer mudanças maiores, me dão dicas para eu alterar várias coisas e o que pedi é deixado de lado. Aí nem adianta fórum para se ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, esse cadastro que tenho vai ser trocado, então vai ficar como backup por uns tempos. Ele já está depreciado e não há interesse de fazer grandes melhorias nele. Então mudar todo o sistema que já vai ficar em desuso não da. Pedi uma coisa. Infelizmente aqui você pedi uma coisa e te mandam coisas que não estão nas suas necessidades..

 

Vale a dica sempre, mas sempre tem que focar na necessidade que a pessoa precisa. Estou precisando de algo mínimo para algo que não quero fazer mudanças maiores, me dão dicas para eu alterar várias coisas e o que pedi é deixado de lado. Aí nem adianta fórum para se ajudar.

require_once 'conexao-pdo.php';
                $sql = "INSERT INTO `usuarios` (`usuario`, `senha`, `nivel`) VALUES (:usuario, :senha, :nivel)";
                $stmt = $PDO->prepare($sql);
                $stmt->bindParam(':usuario', $_POST['login']);
                $stmt->bindParam(':senha', SHA1($senha));
                $stmt->bindParam(':nivel', $_POST['nivel']);

                $result = $stmt->execute();
                if (!$result) {
                    var_dump($stmt->errorInfo());
                    exit;
                }
Acho que é isso que vc quer. SO mudar os campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas uma dúvida agora. O que adianta se criptografar uma senha, se caso o hacker ou pessoa com mais habilidade tiver acesso aos seus dados no banco?

 

Se codificar. Em um exemplo, se a pessoa cadastra uma senha simples. admin

Senha admin, e codificada no md5 por exemplo seria 21232f297a57a5a743894a0e4a801fc3

 

Se a pessoa adivinhar a senha, de nada adianta codificação seja ela em md5, sha1 ou esse hash.

 

Por outro lado se ele não adivinha a senha ou não descobre a senha, e ele visualiza essa senha no banco, ele simplesmente pega a senha codificada no banco e joga no campo de senha no login. Ele entra da mesma forma. E pra que ele vai querer descodificar essa senha se ela codificada já é a própria senha que ele faz o que quer?

 

Só me expliquem isso quem souber

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, o link que te passei mostra exatamente como salvar um hash. É um artigo completo sobre Sistema De Login, que, dentre outras coisas, responde 100% à sua dúvida.

Em nenhum momento mostrei algo fora da sua pergunta. Você que não quis ler o artigo. São coisas diferentes.

 

 

Sobre sua última dúvida, o hash de um hash é um valor totalmente diferente. Ou seja, se um hacker sabe o hash da senha, se ele digitar esse hash no login, será gerado outro hash, que resultará em senha inválida.

Veja:

 

php > $password = 'Wjd7c$';
php > echo md5($password);
0a482eae67403ffc6bdcb0a576ecc4e7
php > echo md5('0a482eae67403ffc6bdcb0a576ecc4e7');
ed1142e01d8b93cc70edc47bc8891231

 

A senha "Wjd7c$" gera o hash "0a482eae67403ffc6bdcb0a576ecc4e7". O hash disso (que equivale a digitar esse valor no campo senha) gera o hash "ed1142e01d8b93cc70edc47bc8891231"

 

E outra: se um hacker acessa seu banco, não há motivos para ele querer fazer login. Acessar o banco significa acessar 100% do seu sistema, somente por que não está "bonitinho na tela". Por isso Segurança é tão importante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então na verdade essas codificações não adiantam de nada. Pois se a pessoa coloca uma senha fácil, de nada adianta, pois a codificação vai apenas a mascarar no banco, coisa que o hacker pode ter mais dificuldade de acessar,

 

Não entendo bem está parte, mas acaba que acho mais seguro que qualquer tipo de codificação dessas, aumentar o nível no login. Ao invez de codificação, colocar mais coisas. não só login e senha, mas ter um painel com login, senha e outro dado qualquer. Acho que isso aumenta muito mais a segurança que codificações que mascaram aonde a pessoa não ve mesmo. E a pessoa vai nas tentativas de senhas fáceis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui gravar perfeitamente a senha md5 no banco, porém creio que tenho de na hora de se logar fazer essa verificação no painel de logiin.

 

Ele está como abaixo.

 

 

<?
include "../config.php";
if ($_GET[acao] == "sair") {
unset($_SESSION['cliente']);
unset($_SESSION['id_cliente']);
echo "<script>window.location='index.php';</script>";
}
$sql = mysql_query("SELECT * FROM clientes WHERE login='$_POST[login]' AND senha='$_POST[senha]' AND ativo");
if (!@mysql_result($sql,0,cliente)) {
echo "<script>window.location='index.php?erro=sim';</script>";
} else {
$_SESSION['cliente'] = mysql_result($sql,0,cliente);
$_SESSION['id_cliente'] = mysql_result($sql,0,id_cliente);
echo "<script>window.location='index.php';</script>";
}
mysql_close();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhas fáceis são facilmente quebradas. Isso é fato e independe de hash ou criptografia. Um simples brute force faz isso, mesmo sem acesos ao banco.

Por isso é recomendável forçar o usuário a inserir senhas com 8 ou mais caracteres, com letras e números.

 

Acesso a um banco com senhas em hash é muito menos prejudicial que acesso a um banco com senhas em plain text. Quebrar um hash só é possível com brute-force. Ou seja, se forem hashes de senhas complexas, há poucas chances de que eles sejam quebrados.

 

Em suma, a Segurança depende de você e do usuário também.

 

Sobre esse "algo mais" que comentou, um simples salt muda totalmente o hash.

Veja

 

php > echo md5('123');
202cb962ac59075b964b07152d234b70
php > echo md5('123' . '8uha93');
14925075e7d7f2df20ee429899efcccf

 

O "8uha93" muda o hash e torna o brute-force mais complexo.

Falo sobre isso neste artigo: http://rberaldo.com.br/seguranca-em-sistemas-de-login-senhas-e-cookies/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, li sobre tudo para entender um pouco. Consegui fazer a inserção no banco em md5, fiz uma mudança na página de login, e com isso também resolvido me logar a senha estando em md5.

 

Mas no update não consigo gravar a senha em md5, tentei várias formas e nada. Meu update está assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça debug das suas consultas.

Use mysql_error(). Issi é mostrado neste tópico

 

Um erro é este:

 

'$_POST[sexo]'cpf

 

Faltou uma vírgula antes de "cpf"

 

 

E seu código está vulnerável a SQL Injection. Nunca insira um dado externo diretamente em uma query.

Veja mais aqui: http://rberaldo.com.br/seguranca-em-sistemas-de-login-protecao-contra-sql-injection/

Compartilhar este post


Link para o post
Compartilhar em outros sites
if ($_POST[Alterar] == "ok") {
    mysql_query("UPDATE clientes SET cliente='$_POST[cliente]',nome='$_POST[nome]',email='$_POST[email]',telefone='$_POST[telefone]',celular='$_POST[celular]',sexo='$_POST[sexo]',cpf='$_POST[cpf]',login='$_POST[login]',senha='md5($_POST[senha])',obs='$_POST[obs]',ativo='$_POST[ativo]' WHERE id_cliente=$_POST[id]");

faltou o md5()

 

Beraldo como ela já disse, ela não quer modificar o sistema dela.. ela já sabe as consequências..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, esse vírgula errei quando postei aqui e fui ajustar, no sistema está tudo ok.

 

BlackMix, isso já tentei com o md5 ali, mas ele continua a gravar normal sem criptografar. O problema está sendo justamente esse, no Update não grava criptografado, no insert fiz normalmente. Colocar o md5 ali não adianta de nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim

if ($_POST[Alterar] == "ok") {

$newpass = md5($_POST['senha']);


mysql_query("UPDATE clientes SET 
cliente='$_POST[cliente]',
nome='$_POST[nome]',
email='$_POST[email]',
telefone='$_POST[telefone]',
celular='$_POST[celular]',
sexo='$_POST[sexo]',
cpf='$_POST[cpf]',
login='$_POST[login]',
senha='$newpass',
obs='$_POST[obs]',
ativo='$_POST[ativo]' 
WHERE 
id_cliente=$_POST[id]");

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

tente assim

if ($_POST[Alterar] == "ok") {

$newpass = md5($_POST['senha']);


mysql_query("UPDATE clientes SET 
cliente='$_POST[cliente]',
nome='$_POST[nome]',
email='$_POST[email]',
telefone='$_POST[telefone]',
celular='$_POST[celular]',
sexo='$_POST[sexo]',
cpf='$_POST[cpf]',
login='$_POST[login]',
senha='$newpass',
obs='$_POST[obs]',
ativo='$_POST[ativo]' 
WHERE 
id_cliente=$_POST[id]");

Perfeito, assim funcionou. Eu só estava conseguindo fazer no insert, talvez pelo tratamento, mas com o update não ia de jeito nenhum.

 

Mas agora tentei entrar para testar e não consigo. o login dele é este.

 

 

<?

include "../config.php";

if ($_GET[acao] == "sair") {

unset($_SESSION['cliente']);

unset($_SESSION['id_cliente']);

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

}

$sql = mysql_query("SELECT * FROM clientes WHERE login='$_POST[login]' AND senha='$_POST[senha]' AND ativo");

if (!@mysql_result($sql,0,cliente)) {

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

} else {

$_SESSION['cliente'] = mysql_result($sql,0,cliente);

$_SESSION['id_cliente'] = mysql_result($sql,0,id_cliente);

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

}

mysql_close();

?>

 

Alterei para isso.

 

<?

include "../config.php";

if ($_GET[acao] == "sair") {

unset($_SESSION['cliente']);

unset($_SESSION['id_cliente']);

$senha = md5($_POST['senha']);

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

}

$sql = mysql_query("SELECT * FROM clientes WHERE login = '$login' AND senha = '$senha' AND ativo");

if (!@mysql_result($sql,0,cliente)) {

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

} else {

$_SESSION['cliente'] = mysql_result($sql,0,cliente);

$_SESSION['id_cliente'] = mysql_result($sql,0,id_cliente);

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

}

mysql_close();

?>

 

Mas não está entrando. Quando acerto algo outra da errado.

 

Mas está gravando certinho da forma que você explicou

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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