Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou precisando desenvolver um sistema de login muito seguro, com a opção de permanecer logado. Então pensei nas seguintes possibilidades: Usar o Cookie para armazenar uma chave única, usar o Session para armazenar os dados enquanto o usuário permanece no site, e usar uma tabela no MySQL do tipo MEMORY para relacionar a chave única do cookie com o ID do usuário.
Acham que esse conjunto pode ser bom e seguro? O mais adequado seria a table do tipo MEMORY mesmo né, pois na questão do desempenho seria ela. Ou recomendam InnoDB por exemplo?
Ahh e outra, pretendo usar um sistema de Token, para mudar as chaves únicas de acordo com X tempo que o usuário estiver no site. Por exemplo, a cada 20 minutos no site, a chave única do usuário muda, aumentando a segurança.
O que vocês acham?
OBS: Pretendo usar 3 algorítimos de criptografia, MD5, SHA2 e RipeMD-160
Sim, sim, não vão afetar muito. Mas eu só to falando deles no caso desse requisito de "permanecer logado" mesmo que o browser seja fechado entende?
E Daí ? o que o 'Storage Engine' tem haver com o browser ? na verdade, não é necessário criar uma tabela pra guardar essa chave. Você seta o cookie, se o mesmo existir, você dá autenticação pro usuário automaticamente, você gera o cookie com o id do usuário.
Isso sim seria inseguro. Pois se um mal intencionado perceber a lógica do cookie com ID, ele pode tentar manipular qualquer ID no cookie (é claro, estamos falando de algo muito improvável, mas probabilidades existem).
Não é inseguro não, se você colocar o MD5 no cookie, você pode fazer a verificação. se o MD5 do banco, é igual ao MD5 do cookie.
Também acho que não essa necessidade de criar uma tabela memory so para armazenar o token.
Você gera um token na propria tabela do usuário e guarda no cookie e automaticamente vai gerando outro token (a cada 20 minutos como você mencionou), não há essa necessidade de criar uma tabela a parte para isso, e até mesmo se você gerar um token randomicamente com sha1+salt(nao precisa de mt coisa), como alguem para descriptografar visto que a cada 20 minutos você vai trocar esse valor.
Posteriormente você apenas verifica se o valor do cookie é igual o token no banco, se nao for pede para relogar.
Entendo. O problema é que vamos supor uns 20 mil usuários cadastrados. Tem uma table account com os campos básicos para login, eu uma col chamada "unikey", que seria essa chave. A única alternativa para otimizar seria eu criar um índice nessa col, mas como de 20 em 20 minutos ela vai mudar, de 20 em 20 minutos seria reindexada (isso em 1 usuário), o que acabaria com o desempenho. Então não sei se seria melhor colocar na table de account ou se seria melhor criar outra table com foreign key.
Amigo, entenda um coisa, 20 mil registros, não é nem a unha do MySQL. pensa de forma genérica.
Entendo, então vou criar mais um campo na table das accounts mesmo. Vou chamar a classe que vai trabalhar com isso de Nuggets, em homenagem aos Cookies :P
Cara, os storage engine, não afetam muito na segurança, na verdade, quem faz é você, você deve saber quando usar os formatos de linha.
Eu tento evitar de usar InnoDB.