![]() |
[Tutorial] Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - Versão de Impressão +- Portal SAMP (https://portalsamp.com) +-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5) +--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7) +--- Tópico: [Tutorial] Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP (/showthread.php?tid=4925) |
Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - xbruno1000x - 28/11/2024 Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP/Open-MP Por xBruno1000x Introdução O armazenamento seguro de senhas é uma responsabilidade fundamental para qualquer desenvolvedor. Quando pedimos que os usuários criem uma senha, estamos lidando com a confiança deles, e é nosso dever proteger essas informações contra acessos não autorizados. Embora o ambiente de SA-MP/Open-MP possa parecer um cenário menos sério, devemos lembrar que, segundo um estudo realizado pelo Google em parceria com a Harris Poll em 2019, 65% dos americanos reutilizam suas senhas em várias contas. Isso significa que uma falha de segurança no seu servidor pode comprometer outras contas importantes de seus usuários, como e-mails, redes sociais e serviços financeiros. Este guia aborda as melhores práticas para armazenar senhas no SA-MP/Open-MP de maneira segura, dificultando ataques e protegendo seus jogadores. O que NÃO fazer 1. Nunca armazene senhas em texto simples Armazenar senhas em texto simples é um erro grave e comum. Caso o banco de dados seja acessado por um atacante, todas as senhas estarão disponíveis de forma legível, causando problemas de segurança em cadeia para os usuários. Sempre use um método de hash para proteger as senhas assim que recebê-las. No SA-MP, desde a versão 0.3.7 R2-1, existe a função `SHA256_PassHash`, que permite criar hashes diretamente no script. Alternativamente, plugins como SampBcrypt e samp-crypto adicionam suporte ao algoritmo bcrypt, que oferece segurança ainda maior. 2. Não use apenas hashing simples Embora criar um hash seja melhor do que armazenar a senha em texto simples, isso não é suficiente. Ataques com rainbow tables podem comprometer senhas fracas (como "123456" ou "password") em segundos. Solução: Adicione salt à senha antes de criar o hash. Melhores Práticas para Armazenamento de Senhas 1. Use Salt O salt é uma sequência aleatória única para cada usuário, adicionada à senha antes de ser transformada em hash. Ele dificulta ataques baseados em rainbow tables e força o atacante a realizar ataques de força bruta. No SA-MP, você pode gerar um salt aleatório ao registrar o jogador, armazená-lo no banco de dados e utilizá-lo sempre que precisar verificar a senha. Código: new salt[64]; Armazene o salt e o hash em colunas separadas no banco de dados. 2. Use Bcrypt O bcrypt é um algoritmo de hash projetado para ser lento e resistente a ataques modernos. Sua principal vantagem é que ele inclui o salt automaticamente e é capaz de aumentar o custo computacional, dificultando ataques de força bruta. Plugins como SampBcrypt e samp-crypto facilitam a implementação no SA-MP. Exemplo básico com bcrypt: 1. Geração do hash no registro: Código: new hash[72]; 2. Verificação no login: Código: if (bcrypt_verify("senhaDigitada", hash)) { 3. Adicione Pepper O pepper é uma string secreta, definida no código do servidor, adicionada antes do hash. Diferentemente do salt, o pepper é compartilhado entre todos os usuários, mas não é armazenado no banco de dados. Caso o banco seja acessado, o atacante precisará conhecer o pepper para reconstruir os hashes. Código: #define PEPPER "minhaChaveSecreta123!" 4. Implemente Limites de Login Bloqueie temporariamente usuários que falharem ao tentar logar várias vezes consecutivas. Isso dificulta ataques de força bruta diretamente no servidor. Exemplo básico: Código: if (tentativasDeLogin >= 5) { 5. Ofereça uma Interface Segura para Alteração de Senha Permita que os usuários alterem suas senhas de forma segura e gere um novo salt a cada alteração. Isso evita que hashes antigos sejam reutilizados. Dicas Extras 1. Senhas Fortes: Incentive os usuários a usarem senhas longas, com letras, números e caracteres especiais. 2. Confirmação de Senha: Peça ao usuário que digite a senha duas vezes ao registrar ou alterar. 3. Avisos de Segurança: Explique claramente que a senha não deve ser compartilhada ou reutilizada. Bibliografia 1. Google/Harris Poll (2019). 2. Documentação Oficial do Open-MP: SHA256_PassHash. 3. SampBcrypt Plugin. 4. samp-crypto Plugin. 5. Open-MP Fórum. RE: Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - DeviceBlack - 29/11/2024 Tenho usado Bcrypt para proteger senhas, com um hash baseado no IP e na data de registro Agora, planejo adicionar um pepper para fortalecer a criptografia e validar as senhas usando regex Novamente Brunão com um tutorial incrível Inclusive, recentemente eu vi um plugin de criptografia com Argon2, selecionado como atual campeão do Password Hashing Competition, superando o BCrypt e outros Acho que vale apena dar uma olhada RE: Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - xbruno1000x - 30/11/2024 (29/11/2024 21:52)DeviceBlack Escreveu: Tenho usado Bcrypt para proteger senhas, com um hash baseado no IP e na data de registro Fico muito feliz por esse tutorial ter agregado pra você! Quanto ao plugin do Argon2 parece ótimo, quando tiver tempo tentarei testa-lo. Caso tenham mais vantagens que os outros, incluirei ele no tutorial também! RE: Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - strelo - 02/12/2024 Ótimo trabalho no guia, xBruno1000x! Tá muito bem explicado e é super útil pra quem quer garantir mais segurança no SA-MP/Open-MP. Mas acho que dá pra complementar com algumas ideias e exemplos práticos que podem deixar ele ainda melhor. Aqui vai: 1. Melhor Proteção com BCrypt Você já mencionou bcrypt, que é ótimo, mas faltou um exemplo mais completo. Aqui vai um teste básico que valida a senha e, se ela for correta, re-hash para garantir que a gente tá sempre usando o custo computacional mais atualizado (exemplo com custo 12): Código PHP: new hash[72]; 2. Bloqueio Progressivo no Login A sua ideia de bloquear login após várias tentativas é ótima, mas pode ser melhorada. Aqui vai uma versão que usa tempo progressivo para dificultar ataques de força bruta: Código PHP: #define MAX_TENTATIVAS 5 Dica: Para produção, considere armazenar o PEPPER em um local seguro, como um sistema de gerenciamento de chaves. 4. Exemplo de Migração de Hashes Se o servidor usava SHA-256 no passado, aqui está um exemplo de como atualizar os hashes antigos para bcrypt na próxima vez que o usuário logar: Código PHP: if (SHA256_PassVerify("senhaDigitada", salt, hashAntigo)) { 5. Educação de Usuários e Senhas Fortes Você pode implementar algo simples para reforçar senhas fortes no registro. Por exemplo: Código PHP: stock ValidarSenha(senha[]) { No registro: Código PHP: if (!ValidarSenha("senhaDoUsuario")) { Conclusão Esses exemplos devem ajudar a deixar seu guia mais prático e atrair ainda mais desenvolvedores ![]() RE: Guia Definitivo para Armazenamento Seguro de Senhas no SA-MP e no Open-MP - xbruno1000x - 04/12/2024 (02/12/2024 18:32)strelo Escreveu: Ótimo trabalho no guia, xBruno1000x!Tenho certeza que seu complemento irá ajudar mais ainda quem ler o guia! +Rep |