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

 

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 daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

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