Pergunta

Eu quero meu site para ter uma caixa de seleção que os usuários podem clicar para que eles não tem que entrar em cada vez que visite o meu site. Eu sei que vou precisar armazenar um cookie no seu computador para implementar isso, mas o que deve ser contida nesse biscoito?

Além disso, existem erros comuns que atente para manter esse cookie de apresentar uma vulnerabilidade de segurança, o que poderia ser evitado enquanto continua a dar a funcionalidade 'Lembrar-me'?

Foi útil?

Solução

Improved persistente Entrada Biscoito Best Practice

Você pode usar esta estratégia descrita aqui como melhor prática (2006) ou uma estratégia actualizada descrito aqui (2015):

  1. Quando o usuário fizer sucesso com Remember Me marcada, um cookie de login é emitido , além do cookie de gerenciamento de sessão padrão.
  2. O cookie de login contém uma série identificador e um símbolo . A série e são números aleatórios insondáveis ??simbólicos a partir de um adequadamente grande espaço. Ambos são armazenados juntos em uma tabela de banco de dados, o token é hash (sha256 é bom).
  3. Quando um não-conectado no usuário visita o site e apresenta um cookie de login, as séries identificador é olhou para cima no banco de dados .
    1. Se o série identificador está presente e o hash do símbolo corresponde ao hash para esse identificador série, o usuário é considerado autenticado . Um novo token é gerado, um novo hash para o token é armazenado em relação ao recorde de idade, e um novo cookie de login é emitido para o usuário (não há problema em voltar a usar o identificador série ).
    2. Se a série está presente, mas o token não corresponde, a roubo é assumido. O usuário recebe um aviso com palavras fortes e todas as sessões lembradas do usuário são excluídos.
    3. Se o nome de usuário ea série não estão presentes, o cookie de login é ignorado .

Esta abordagem fornece defesa em profundidade. Se alguém consegue vazar tabela de banco de dados, ele não dá um atacante uma porta aberta para representar usuários.

Outras dicas

Gostaria de armazenar uma ID de usuário e um token. Quando o usuário volta ao site, comparar esses dois pedaços de informação contra algo persistente como uma entrada de banco de dados.

Quanto à segurança, simplesmente não colocar qualquer coisa lá dentro que vai permitir que alguém para modificar o cookie para obter benefícios extras. Por exemplo, não armazene os seus grupos de usuários ou sua senha. Qualquer coisa que pode ser modificado que iria contornar a sua segurança não devem ser armazenados no cookie.

armazenar seus UserId e uma RememberMeToken. Quando eles sessão com a lembrar-me verificado gerar uma nova RememberMeToken (que invalidar quaisquer outras máquinas que são marcados estão me lembro).

Quando eles retornam procurá-los pelo lembra de mim token e certifique-se as partidas UserId.

A investigação sessões persistentes eu descobri que não é simplesmente vale a pena o risco de segurança. Use-se que seja absolutamente necessário, mas você deve considerar tal sessão apenas fracamente autenticado e forçar um novo login para qualquer coisa que poderia ser de valor para um atacante.

A razão de ser, claro, é que os cookies contendo sua sessão persistente são tão facilmente roubado.

4 maneiras de roubar os cookies (de um comentário por Jens Roland na @splattne página baseou sua resposta sobre):

  1. Ao interceptar-lo através de uma linha insegura (packet sniffing / seqüestro de sessão)
  2. Ao acessar diretamente do navegador do usuário (através de qualquer malware ou acesso físico ao caixa)
  3. Ao lê-lo do banco de dados do servidor (Injection provavelmente SQL, mas poderia ser qualquer coisa)
  4. por um corte XSS (ou do lado do cliente semelhante explorar)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top