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:

  Citar

 

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

 

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

  Citar

 

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
  Em 20/05/2016 at 23:22, flaviasam disse:

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.

 

  Citar

 

<?
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.

  Citar

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
  Em 22/05/2016 at 21:14, BlackMix disse:

 

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.

 

  Citar

 

<?

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.

  Citar

 

<?

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 luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • 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
       
×

Informação importante

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