Ir para o conteúdo
joaocasta

[Resolvido] guardar passwords na base de dados

Mensagens Recomendadas

yoda

Podes por exemplo encriptar o email do utilizador (ou o username, o que usares no login) em conjunto com a password e guardar esse valor na base de dados.

$email = $_POST['email'];
$password = $_POST['password'];
$password = md5($email.$password);

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
joaocasta

Podes por exemplo encriptar o email do utilizador (ou o username, o que usares no login) em conjunto com a password e guardar esse valor na base de dados.

$email = $_POST['email'];
$password = $_POST['password'];
$password = md5($email.$password);

isso é seguro? e depois no login como faço?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrotuga

Os métodos que vocês apontam não são para encriptar, são para guardar um hash, o que é completamente diferente e como tal serve propositos diferentes.

Guardar passwords na base de dados é na maior parte dos casos desnecessário. Para autenticar utilizadores, a prática corrente é guardar um hash da password com algum tipo de sal.

pesquisa os seguintes termos no google:

"hashing vs encryption"

"salting passwords"

a resposta curta, o que queres guardar é qualquer coisa como:

a_tua_funcao_de_hashing_favorita($password+$sal)

depois em vez de verificares se a password é igual, verificas se o hash é igual. Desta forma proteges as passwords caso a tua base de dados seja comprometida.

Mas fica o aviso, se não perceberes bem a lógica disto, podes ter a certeza que o teu site vai ser hackado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Guardar passwords na base de dados é na maior parte dos casos desnecessário. Para autenticar utilizadores, a prática corrente é guardar um hash da password com algum tipo de sal.

Eu não me recordo de nenhuma situação que necessitei de guardar a password na base de dados.

Como é que verificas se a password é igual se só existe um hash dela?

Quando fazes login vais buscar o salt para esse login e geras o hash para a password indicada (se o login existir na base de dados). Depois verificas se o hash que está na base de dados é igual ao hash da password que o utilizador forneceu.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Lol, eu sei bem como o fazer :D

O @pedrotuga é que explicitou 2 passos quando na verdade só existe um, pois se a password não é guardada não pode ser comparada com nada em formato raw.

A opção mais segura que se conhece até agora (por não haver sinais de problemas) é o bcrypt. O problema dos salts é que podem ser alvo na mesma medida das password de brute force attacks, rainbow tables, dictionary attacks, ... (tanto md5 como sha1, métodos populares, são passíveis disto). Alternativa ao bcrypt (se não existir a extensão) é usar salts (curtos e sem recorrer a palavras de dicionário) com passwords complexas e longas (letras, numeros, capitalização, ..)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Em ultima instância não haverá password segura. É tudo uma questão de tempo até que a password seja quebrada, pois os hash's não são infaliveis. Nem mesmo criptografia verdadeira é completamente infalivel. Haja poder de computação e tudo pode ser quebrado. Eu diria que é tudo uma questão de proporção. Pela mesma razão que não se mata uma formiga com um martelo, não se usa AES para encriptar senhas num website que não guarda informação cuja sensibilidade valha o uso dessa tecnologia.

O bcrypt, é um sistema de hash baseado no algoritmo Blowfish que é um algoritmo de cifra de bloco simétrico. o Blowfish é resistente à criptoanálise, e é um excelente algoritmo de criptografia. O bcrypt por sua vez utiliza uma implementação de Blowfish e acrescenta-lhe sal. Segundo o que li, ainda resiste a ataques de brute-force.

Eu por norma uso sha1024 + salt na maioria dos websites e não tenho tido razão de qeixa. Apenas recomento aos utilizadores o mesmo que eu uso para mim. Passowrds com letras (maiusculas e minusculas), numeros e caracteres, com um minimo de 16 caracteres.

Pessoalmente tentava gosto da "proporcionalidade", mas respeito outras opiniões.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrotuga

Como é que verificas se a password é igual se só existe um hash dela?

You're doing it wrong.

É precisamente esse o meu ponto.

Uma password é uma mnemónica conveniente para ser memorizada por humanos. Eu estava a falar de guardar hashes de password para verificação de autenticidade no teu sistema. Se queres guardar as credenciais de acesso a sistemas terceiros numa base de dados então guarda uma chave. Guardar uma password é estupido.

Em ultima instância não haverá password segura. É tudo uma questão de tempo até que a password seja quebrada, pois os hash's não são infaliveis. Nem mesmo criptografia verdadeira é completamente infalivel. Haja poder de computação e tudo pode ser quebrado. Eu diria que é tudo uma questão de proporção. Pela mesma razão que não se mata uma formiga com um martelo, não se usa AES para encriptar senhas num website que não guarda informação cuja sensibilidade valha o uso dessa tecnologia.

O que é desproporcionado é essa abordagem de olhar para os hashes como uma ferramenta frágil. Em primeiro lugar, está-se logo assumir que os hashes vão todos ser comprometidos como se um hacker tivesse um botão mágico para os obter. Depois, se forem temperados com sal, cada ataque tem que ser especialmente direcionado a um alvo em particular, o que permite no mínimo conter estragos ou pelo menos comprar algum tempo para mitigar os problemas.

Terceiro, nessa situção por si só já remota, o atacante tem que saber detalhes sobre o sistema para poder tirar algum partido disso. De que vale um carradão de hashes se o hacker não sabe o que fazer com eles.

Quarto, calma aí com essas conclusões precipitadas de que se encontram colisões para hashes assim com quem vai às cerejas.

Aqui está um hash de uma password:

fa403006cd3616f71de58f8f417a11d7fadc0a2e998282083dbbc2ce816506d236b732efff803b1449578aa6f9c18edfb8b0d32b211bff88086bb818d459245a

força, mostrem-me lá quão falível é e saquem a pass

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Nazgulled

podem colocar algum codigo?

Já experimentaste clicar no link que eu coloquei ou dá-te muito trabalho e queres que te leva as colheres todas à boca? Tens LITERALMENTE tudo o que precisas naquele link e o código do artigo até está em PHP, que queres mais?

Agora lembro-me porquê que deixei de participar tanto no fórum, principalmente neste tipo de tópicos. Vocês têm uma paciência de santo...

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

@pedrotuga: Parece que houve uma má interpretação do que realmente quiz dizer e por culpa minha que deveria ter escrito de forma mais clara.

O que eu quiz na verdade dizer no paragrafo citado e no contexto do post foi, que virtualmente qualquer hash pode ser descoberto. Um Cracker por norma não tem acesso a sistemas suficientemente capazes para crackear hash's complexos, acabando por se limitar a rainbow-tables, colisões de hash's e afins. Da mesma forma que na maioria dos casos não dispõe de meios técnicos, capacidade ou vontade, de encontrar a senha correspondente a um determinado hash com o respectivo salt e ainda que disponha de tudo isso, o ataque ao hash será provávelmente a ultima abordágem tentada, pois é a que demorará mais tempo e consumirá mais recursos, pois os hash's não são uma "ferramenta de brinquedo", nem tão pouco de fragilidade extrema. mesmo um bom hash MD5 pode demorar mais do que o que compensa, para o descobrir.

No entanto, qualquer hash continua a ser virtualmente passivel de ser crackado, utilizando um conjunto de técnicas, e muito poder de computação. Não existem "botões mágicos" nem formas "instantaneas" tipo "cinema de ficção" de crackear senhas devidamente protegidas por hash's. O que quiz dizer quanto à proporção referia-me ao rácio do custo de recursos de processamento e memória vs o valor do que está a ser protegido. Não creio que sistemas criticos usem o mesmo nivel de protecção nas suas senhas que por exemplo se usaria numa pasta que não contenha mais que um projecto de uma disciplina qualquer, ou até "um excerto de um pasquim qualquer", por exemplo.

O que eu realmente quiz dizer tentei explicar nos dois parágrafos anteriores. Aceito que possa não ter conseguido, pois não sou muito dotado de jeito para escrever português correcto, fazendo apenas um esforço para me explicar da melhor forma possível.

Ainda utilizei 25 minutos de tempo a tentar pelo menos calcular qual o algoritmo utilizado pela tua hash e confesso que não consegui. Não posso dizer o que é nem o que não é pois a hash resistiu às tentativas recorrendo a rainbow tables, brute-force em que o software me deu um numero tão grande quando apresentou o tempo que levaria a decifrar (tempo em dias), que não o consigo transcrever com precisão (não consegui fazer copy-past e não quero cometer imprecisões).

Espero com isto ter clarificado o que quiz dizer. Caso não tenha conseguido, mais uma vez, peço desculpas e que me indiquem o que fica em falta esclarecer, pois como sempre estou disponivel para o fazer.

Cordiais cumprimentos,

Apocsantos

P.S.: <brincadeira> A existir um "botão mágico" em vez de ser para adivinhar hash's eu contentava-me e penso que cerca de 11 milhões de pessoas também, com um "botão mágico" que adivinha-se a chave do euromilhões de terça-feira!</brincadeira>


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

@pedrotuga,

Mascarar os hashes como infalíveis é atirar areia aos olhos das pessoas (faz sentido no contexto de um serviço / produto, pois o cliente terá sempre essa preocupação, mas nunca no contexto de aprendizado). Não existe método de hash / criptografia infalível. Se o homem cria, o homem consegue destruir, tão simples quanto isso. O que existem é métodos mais fiáveis que outros, e são esses que valem a pena explorar.

Segundo a opinião de muitos que trabalham diariamente com informação sensível, a melhor postura a adoptar é adequar o sistema à sensibilidade da informação contida. Se por exemplo temos um site em que um utilizador só se regista para poder receber uma newsletter, o md5 serve perfeitamente, mas se tivermos informações como cartões de crédito ou algo parecido o caso muda de figura. Isto, mais uma vez, porque não existe realmente segurança que não passe de um grau de dificuldade para quem tenta aceder.

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrotuga

vou clarificar porque é que estas discussões me fazem levar a mão à cabeça.

Vocês têm noção que a a resistencia à colisão, do ponto de vista de um hacker, é um problema que é várias ordens de grandeza mais simples de atacar do que encontrar uma colisão de um hash dado?

E que a esmagadora maioria dos casos de utilização de hashes, incluindo o uso discutido neste tópico, só é comprometido com a procura de uma colisao em particular?

Sinceramente, depois de ler as vossas mensagens a conclusão que tiro é que nem sabem do que estou a falar.

Para vos aclarar as ideias: dado um hash md5 aleatório, se dispuserem de um sistema que consiga calcular um milhão de hashes por segundo, demorar-vos-á em média um quarto de milhão de anos para encontrar a tão desejada colisão.

Se o homem cria, o homem consegue destruir, tão simples quanto isso.

Ser padre é uma profissão tão digna (mais do que?) como programador, mas a César o que é de César, estamos no portugal-a-programar. Essa afirmação aqui não tem qualquer valor.

Eu não sou sequer particularmente interessado no tópico da encriptação. Mas por favor não tornem este forum num festival de clichés falsos papagueados até à exaustão por serem supostamente pomposos.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Penso que este

https://www.youtube.com/embed/u2v5Dd9wJkY?feature=oembed

seja relevante para esta questão e outra num tópico semelhante.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Umbus

Bem granda confusão que vai para aqui. Eu uso dois tipos de hash mais 2 salts uma para cada hash. Não e infalivel mas acredito que seja bastante chato e demorado descobrir a pass.

Quanto a dicas nao uses md5. Existe sites para fazer o reverse da hash

Editado por Umbus

Eu sou eu e eu sou aquele que sou eu...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
Quanto a dicas nao uses md5. Existe sites para fazer o reverse da hash

Não, não existem. Existem sites que têm rainbow tables do MD5, o que é completamente diferente.

  • Voto 2

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.