28/11/2024 17:18
(Esta mensagem foi modificada pela última vez a: 30/11/2024 01:54 por xbruno1000x.)
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.
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:
2. Verificação no login:
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.
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:
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.
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];
SHA256_PassHash("senhaDoUsuario", "saltAleatorio", salt, sizeof(salt));
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];
bcrypt_hash("senhaDoUsuario", hash, sizeof(hash));
2. Verificação no login:
Código:
if (bcrypt_verify("senhaDigitada", hash)) {
// Login com sucesso
} else {
// Senha incorreta
}
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!"
new senhaComPepper[128];
format(senhaComPepper, sizeof(senhaComPepper), "%s%s", PEPPER, senhaDoUsuario);
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) {
Kick(playerid);
SendClientMessage(playerid, -1, "Muitas tentativas falhas. Tente novamente mais tarde.");
}
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.
Discente de Sistemas de Informação no Centro Federal de Ensino Tecnológico(CEFET/RJ)
Programador SA-MP desde 2012
Programador SA-MP desde 2012
Não envie dúvidas por inbox, crie um tópico. Sua dúvida pode ser a dúvida de outro alguém, e seu tópico ajudará outras pessoas no futuro.