securty javascript: uma chamada de AJAX para gravar resolução de tela do usuário, é possível prevenir números falsos?

StackOverflow https://stackoverflow.com/questions/908283

Pergunta

Esta é uma pergunta de segurança javascript: suponha que uma página descobre a resolução da tela do computador, como 1024 x 768, e quer usar uma chamada de AJAX para registrar esses dados na base de dados

.

Existe uma maneira para realmente evitar que dados falsos sejam inseridos na base de dados? Eu acho que qualquer que seja o HTML ou Javascript faz, o usuário pode fazer engenharia reversa do código para que alguns números falsos são inseridas no banco de dados, ou se existe uma maneira impedir que isso aconteça totalmente? (100% seguro).

Atualizar : ou em uma situação semelhante ... se eu escrever um jogo simples javascript ... há uma maneira para o usuário para enviar de volta a pontuação por AJAX e mentir sobre a sua pontuação?

Foi útil?

Solução

Se você começar com a suposição de que o usuário que você está se comunicando é malicioso, então não; não há nada que você pode fazer para controlar os dados que passam por você. Certamente não com 100% de certeza -., No pior caso, eles podem usar ferramentas de rede para reescrever ou substituir qualquer conteúdo "correta" com o que quiserem

Se você só quer evitar maldade casual, você poderia ofuscar ou criptografar seu código e / ou dados. Isso não vai impedir um atacante determinado.

Se você realmente confiar que o usuário real, mas suspeito que outros possam tentar representá-los, você pode usar outras técnicas como um canário dinâmico: enviar ao usuário um número aleatório, e se eles retornam o mesmo número para você, você sabe que ele realmente veio deles. (Ou você está sendo atingido por um ataque man-in-the-middle, mas hey;. Isso é o que SSL é para)

Outras dicas

Não é possível parar os usuários de enviar os números que eles gostam de volta de JavaScript.

Eu acho que o melhor que você pode fazer é fazer algum tipo de controlo no lado do servidor para certificar-se os números enviados olhar para trás como uma resolução realista.

Eu não tenho certeza por que alguém iria gastar o tempo para falsificar esses números em primeiro lugar embora.

Sim, você está correto. Desde que você está usando o código do lado do cliente, você tem que dizer ao computador do usuário (e, portanto, o usuário) de uma forma ou outra, qualquer que seja a criptografia ou ofuscação que você está usando. Não há nenhuma maneira em torno dela.

Para a resolução, que seria basicamente impossível determinar se é válido resolução. Minha resolução é normalmente enviado para o servidor como 5120 x 1600, o que parece bastante irreal, mas é porque as 2 telas são frequentemente enviados como 1. Caso contrário, há uma enorme variedade de possibilidades em resoluções de tela e configurações de tela, você' d provavelmente remover um monte dos válidos, embora possam ser poucos.

Para o resultado do jogo, você poderia fazer verificações adicionais que tornam mais complicado para verificar. Coisas como o envio de vários avisos da pontuação durante todo o jogo e exigir o número X para garantir que a pontuação recebida é válido. (IE, deve receber um entre 200-300, 400-500, 700-800 e, em seguida, a pontuação final de 1000.) Com o placar final, você também pode ter algum tipo de valor criptografado que só pode ser usado uma vez ou que contenha alguns dados com um CRC nele. Basicamente, no final, exigem receber outros dados do que apenas a pontuação, especialmente para as pontuações mais elevadas.

Para tentar uma resposta, concebendo comentários feitos por Dok, e você mesmo, há uma distinção clara entre a manipulação de um aplicativo para 'enganar' para fora de algo, seja um negócio online para obter algo mais barato ou um MMPORG para obter mais experiência, que manipulá-lo de tal maneira a que torna a interface incorretamente e diminui a experiência geral do usuário para esse particular (hackers?) user.

Seu tempo seria melhor gasto com foco em outros aspectos do seu site. Eu não recomendo os usuários do meu site manipular a HTML para fazer parecer engraçado em suas máquinas, mas eu não estou indo para ir tudo para fora e ofuscar a minha saída servidor para impedi-los de se machucar. No seu caso, Gama verificando contra valores seguros pré-definidos, fazendo uso do DB, para garantir que o usuário está vendo com uma carga desnecessária puts resolução 'permitidos' na sua aplicação, e leva tempo para fazer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top