Ir para conteúdo

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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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