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

 

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]");

BlackMix, consegui resolver aqui a parte de login. Muito obrigada mesmo a ti e ao Beraldo também.

 

Sua dica aqui foi fundamental.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você gerou o md5 no bloco que faz logout

 

Ou seja, $senha não existe e vai valor vazio para o SELECT

Se você habilitasse todas as exibições de erro, como mostrado neste tópico, na Orientação No. 3, como já foi sugerido antes, uma mensagem de aviso já teria sido exibida para alertá-la sobre o problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só reabrindo aqui.

 

kkkkkkk, Mas como eu não deixo de editar a senha?

 

se eu coloco uma senha admin por exemplo, ele gera isso em sha1 d033e22ae348aeb5660fc2140aec35850c4da997

 

Até aí tudo bem, mas quando eu vou editar qualquer item do cadastro, ele altera essa senha. dessa d033e22ae348aeb5660fc2140aec35850c4da997 ele gera outra senha 7b2e9f54cdff413fcde01f330af6896c3cd7e6cd

 

Aí não consigo mais entrar no cadastro, pois ele já gera outra senha que nem sei o que é;

 

Oh loco.....

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?
include "../config.php";
if ($_GET[acao] == "sair") {
    unset($_SESSION['cliente']);
    unset($_SESSION['id_cliente']);
    //$senha = md5($_POST['senha']); Aqui não lol
    echo "<script>window.location='index.php';</script>";
}   

$name = $_POST['login'];
$pass = md5($_POST['senha']); // Aqui Sim :)

    $sql = mysql_query("SELECT * FROM clientes WHERE login='$name' AND senha='$pass' 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();
?>

Assim deve funcionar..

 

Baraldo já tinha falado que estava no lugar errado.

 

O problema mesmo é que esse jeito de programar já é deprecado..

Caso o php atualize no servidor vai parar tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, o problema é outro: só deve incluir a senha no UPDATe se uma nova senha for digitada.

Para isso, é só fazer um if:

$sql = "UPDATE ... SET campo1 = valor";
 
if (!empty($_POST['senha']))
{
    $sql .= ", senha = '" . md5($_POST['senha']) . "'";
}
 
$sql .= " WHERE id = <id_do_usuario>";

Assim, só é editada a senha se o usuário digitar um novo valor a ela

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/

Beraldo, você tem algum exemplo ou script q previna brute force? Pego por ip, sessão gerada, set a maquina do cara com cookie..algum exemplo de como bloquear tentativas?

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.

Discordo.

Rode o código abaixo. Versão online se desejar (https://ideone.com/wUrIk4)

<?php


$senha = '123456';
echo md5($senha).PHP_EOL;
echo sha1($senha).PHP_EOL;
echo sha1(md5($senha)).PHP_EOL;
echo md5(sha1($senha)).PHP_EOL;


echo 'Com password_hash'.PHP_EOL;


//senha utilizando password hash
echo password_hash($senha, PASSWORD_DEFAULT).PHP_EOL;
//mesma senha utilizando password hash
echo password_hash($senha, PASSWORD_DEFAULT).PHP_EOL;

Experimente jogar no google as 4 primeiras senhas geradas e depois jogue as 2 ultimas.

Ainda que invadam seu Banco de dados o risco de comprometer a privacidade dos seus usuários será bem menos já que muitos utilizam a mesma senha (vide links abaixo) para vários serviços. Se a senha estiver em md5 a primeira coisa que o invasor tentará, será, testar os logins.

Um exemplo bem tosco que fiz mas dá pra ter uma noção do estrago.

http://cartilha.cert.br/senhas/#8.4

http://betanews.com/2015/07/30/59-percent-of-consumers-reuse-passwords/

https://www.passwordboss.com/password-habits-survey-part-1/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, você tem algum exemplo ou script q previna brute force? Pego por ip, sessão gerada, set a maquina do cara com cookie..algum exemplo de como bloquear tentativas?

A ideia é limitar o número de tentativas. Pode implementar o limite por IP, cookie ou pelos dois.

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]");

 

BlackMix, sua solução aqui foi perfeita.

 

O problema é quando edito qualquer cadastro do usuário, seja um telefone ou endereço, ele altera a senha também, gerando uma senha desconhecida em cima da senha criptografada que já havia.

 

Quando a servidor mudar, acho muito difícil, conversei com dois donos de hospedagens grandes preocupada com isso, só me falaram que foi loucura no php 7 desativar de vez comandos mysql_

 

Falaram que vão preservar por anos e anos versões de php abaixo da 5.5. Raciocínio lógico, desativar versões abaixo da 5.5 ou então pior, abaixo da 7 é decretar a falência da hospedagem.

 

Eles tem cerca de 90% de sites, sistemas e scripts em geral rodando com versões de php antigas. Uma imensidão de sistemas e sites de profissionais liberais que tem sistemas ou sites que as pessoas nem sabem mais do programador, etc.. Tem profissional liberal que tem um site por ter, se o site dele para do nada, ele simplesmente vai para um wix gratuito da vida.

 

Me diga qual hospedagem sustentaria se do nada cerca de mais de 70% dos clientes saíssem de sua hospedagem? Apesar de ter 90% em situação defasada, cerca de 20% ainda poderiam atualizar, mas o restante não. Insustentável.

 

Não adianta ficar ouvindo muitos dizerem que use PDO, use Mysqli, seu sistema está depreciado, e blá blá blá.

 

Que é uma melhora, é um avanço. Sabemos, mas uma maioria esmagadora que tem e paga uma hospedagens são pessoas leigas, advogados, carpintarias, dentistas, e por aí vai em uma imensidão, Falar para um cara desses que ele tem que contratar um profissional para migrar o sistema ou site dele para um PDO ou Mysqli é falar grego, e se parou de funcionar ou começar a dar erros, ele simplesmente pula fora. O cara é leigo. Deu erro é problema da hospedagem. E se tiver de pagar um programador para alterar código, ele vai ter site no wix de graça para não ter dor de cabeça, ou então comprar um site ou sistema pirata em PDO no mercado livre..

 

Tem gente que não gosta de falar a verdade. Hospedagem vai trabalhar com versões acima de 5.5, mas não vão largar jamais versões abaixo dela. Não são loucas. Daqui a 5 anos, uma média ou grande hospedagem ainda vai ter mais de 60% de sites, scripts, ou sistemas baseados em mysql_ E mesmo daqui a 5 anos se elas deixarem de trabalhar com versões abaixo de 5.5, elas ainda correm risco sério de fecharem as portas.

 

Um grande exemplo. Porque hospedagens grandes como a Locaweb e Hostgator que tem um número gigante de clientes não largam o osso? Trabalham com versões de PHP 4 ainda. Então imagine. Daqui a 10 anos ainda nem pensam em deixar de trabalhar com versões abaixo de 5.5.

 

Programador acha bonito e eficiente PDO e Mysqli, donos de hospedagens acham lindo Php antigo e comando mysql_.

 

Se consome recursos ou gera erros a mais para eles? Até pode, mas a compensação pelo fator grana e quantidade não tem preço..

 

O dono de hospedagem iria adorar se todos atualizassem seus sistemas e do nada da noite para o dia tudo perfeito com sistemas e sites já atualizados. Mas eles sabem que isso é história para boi dormir. O que sustenta eles na realidade é a enchente de sites, sistemas e scripts em geral de versões php bem ultrapassadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser que a senha esteja em branco.

A idéia seria:

1 - Verificar se a senha está vazia;

2 - Comparar se é a mesma do banco;

3 - Se for diferente do banco e não estiver vazia, o faz o update da senha;

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

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

$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]',
  obs='$_POST[obs]',
  ativo='$_POST[ativo]' ";
  
  if(!empty($newpass) && $newpass != senhaAtual){
     $query .=" senha = '$newpass' ";   
  }
  $query .="WHERE id_cliente=(int)$_POST[id];";
 //echo $query;

 mysql_query($query);
}

Já que precisa utilizar mesmo mysql-* recomendo ler(entre outros)

http://php.net/manual/pt_BR/security.database.sql-injection.php

 

Valide sempre as entradas, do modo que está enviando o id, uma simples aspas no input estraga(coloquei um (int) no code) tudo rss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está em branco, grava direitinho, Pois ela volta no campo senha e estou comparando pelo phpmyadmin,

 

Gravo a senha admin para um exemplo, pois já sei que a combinação em sha1 é d033e22ae348aeb5660fc2140aec35850c4da997, então quando edito qualquer registro do cadastro ele altera essa combinação e me da outro valor, se eu editar novamente ele muda para outro e assim por diante.

 

Vou ver aqui com sua ideia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos, dando erro aqui. Parse error: syntax error, unexpected ';' Linha 15 deve ser no ativo o fechamento. Ou falta algo

 

 

ativo='$_POST[ativo]' ";

if(!empty($newpass) && $newpass != senhaAtual){
$query .="
senha = '$newpass' ";
}
$query .="
WHERE id_cliente=(int)$_POST[id];";
//echo $query;

mysql_query($query);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei o pontinho final: $newpass = md5($_POST['senha']);.

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

 

Parou o erro, mas não grava nadinha

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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