Como impedir que os usuários acessem um aplicativo da web a partir de uma página de login Html salva localmente?

9

Eu tenho um aplicativo da web que é usado por muitos usuários não técnicos. Descobri que vários desses usuários estão salvando a página de login do aplicativo em seus desktops (o que também salva os arquivos CSS e JS associados). Então, para começar a usar o aplicativo, eles clicam duas vezes no ícone da área de trabalho que mostra a cópia local usando o protocolo file: //.

Isso pode causar problemas mais tarde, por exemplo se eu alterar o formulário de login ou o URL para o qual ele envia, etc. Além disso, alguns utilitários de javascript, por exemplo, PIE.htc não funciona usando o protocolo file: //.

Obviamente, o que eles devem fazer é salvar um favorito / indicador de navegador, estou procurando uma maneira de detectar e avisar esses usuários sem confundir o resto. Eu tenho usado algum javascript para avisar esses usuários:

if (top.location.protocol == 'file:') {
    alert('This application is not designed to be accessed from a desktop copy...')
}

Mas isso só avisará os usuários que salvaram a cópia da área de trabalho desde que eu adicionei este pedaço de javascript.

Alguém mais teve esse problema e criou soluções inteligentes que gostaria de compartilhar?

Obrigado

Atualização:

No final, decidi fazer isso definindo um cookie com um valor nonce na solicitação da página de login e armazenando o mesmo valor que um campo oculto no formulário. Em seguida, no manipulador de envio do formulário, verifique se os dois são iguais e mostre uma mensagem de erro, se não. Pode-se armazenar o nonce em uma sessão em vez de um cookie, mas não quero criar sessões desnecessárias.

Se o usuário tiver salvo a página de login localmente, ela provavelmente terá valores de nonce diferentes no formulário salvo em comparação com o cookie (se eles tiverem um cookie).

Normalmente, não se adiciona proteção CSRF (isso é o que é isso) a um formulário de login, mas ele atende aos meus requisitos. Eu li sobre essa técnica no The Register, link , o Google implementou proteção semelhante para seus formulários de login , para proteger contra falsificação de solicitações de login, link .

    
por Barry Pitman 31.01.2012 в 14:07
fonte

6 respostas

1

Talvez biscoitos? Se o site estiver sendo executado com file:\ , provavelmente não haverá cookies na solicitação. (Claro, agora você deve adicionar algum cookie (dados da sessão) na sua página de login.

Além disso, leia sobre o link do CSRF e sobre como evitar o método.

    
por IProblemFactory 31.01.2012 / 14:15
fonte
2

Acho que sua melhor aposta será instruir os usuários a usar marcadores em vez de salvar arquivos físicos.

Além disso, provavelmente existe uma maneira de criar um atalho para sua URL, talvez durante o logon?

    
por Tim 31.01.2012 / 14:15
fonte
1

Provavelmente, você pode verificar o referenciador http no lado do servidor e avisar os usuários que não vêm de seu formulário de login hospedado.

Editar:

Na verdade, uma pergunta vagamente semelhante foi feita antes e obteve uma boa explicação porque o referenciador não é uma solução ideal e também fornece uma solução alternativa: Como verificar se um pedido se vindo do mesmo servidor ou servidor diferente?

    
por Till 31.01.2012 / 14:14
fonte
1

Por que você, em vez do alerta, não redireciona a sua página?

window.location = 'http://www.yourdomain.com'

Ou você também pode forçar um recarregamento com window.location.reload();

    
por Pedro Quintairos 31.01.2012 / 14:17
fonte
0

Em vez de mensagem, você pode redirecionar seu usuário para a página real que tem o formulário de login ou mostrar a caixa de ajuda que explicará que o usuário deve salvar a página dessa maneira.

    
por Seagull 31.01.2012 / 14:14
fonte
0

Você pode definir uma variável de sessão configurada como uma variável oculta no formulário. Se isso não estiver lá, você redireciona para o seu formulário de login.

    
por malonso 31.01.2012 / 14:20
fonte