Ir para conteúdo
Fórum Script Brasil
  • 0

Acesso Direto (como impedir?)


fiote

Pergunta

Galerinha, boa tarde.

Eu tenho uma "engine" javascript que uso num webgame que estou fazendo. Essa engine tem vááárias classes, vários objetos, vários metodos, váááárias variáveis (lol), etc. Como o jogo gira em torno dessa engine, eu não posso deixar que o usuário manipule as variáveis de forma direta.

Pensei em de alguma forma esconder o código-fonte, assim o usuário não saberia o nome das variáveis, por assim dizer. Porém, como eu já imaginava, é impossível bloquear o acesso ao código-fonte (no máximo podemos dificultar).

Problema:

Eu não quero que o usuário vá na barra de endereço e digite MinhaForça = 999 (ou algo equivalente).

Dúvida:

Eu queria saber se existe alguma forma de impedir essa acesso direto entre o usuário e o javascript. Talvez alguma opção do javascript, ou das próprias classes (aquelas paradas de publico, privado, etc (não sei muito sobre)).

Grato pela atenção =)

Editado por fiote
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Não sei se vocês sabem, mas então explicando o que eu queria dizer:

A barra de endereços do seu navagador serve de input para o javascript...

Você pode enviar comandos digitando-os como se fosse um endereço de um site.

Se você for lá e digitar javascript:MinhaForca = 999 na barra de endereços, ele vai enviar esse comando via javascript.

O problema no caso é que ao mesmo tempo o seu navegador interpreta aquilo como um endereço, e vai pra tal página.

Pra evitar isso, basta fazer algo como javascript:alert(MinhaForca = 999), que ele vai executar o comando perfeitamente e retornar o alert (no caso 999).

Aí vai o usuário que sabe um pouco de javascript, abre meu código fonte, acha o método "vencerBatalha()", chama esse método pelo modo que acabei de dizer.... e estraga todo o sistema do jogo...

O que eu procuro é um modo dizer ao javascript "olha só, você só vai executar comandos que você mesmo enviar, e não os que o usuário enviar via barra de endereço". Entendeu? ^^

Jonathan, fazer todas as verificações server-side seria o último recurso, visto que isso vem junto com o famoso "lag", o que eu estou tentando evitar, já que é um webgame SEM refreshs, e mesmo o nosso amigo ajax/request leva um tempinho pra retornar.

Editado por fiote
Link para o comentário
Compartilhar em outros sites

  • 0

Hm..

Não sabia disso

Você tem como passar um exemplo com link's desse tipo, para que possa testar ?

Mas, à princípio, uma solução seria encapsular todo o código num objeto e utilizar métodos privados (leia-se variáveis locais no objeto do tipo function, já que javascript não incorpora isso formalmente)

Link para o comentário
Compartilhar em outros sites

  • 0

Jonathan, quer fazer um teste?

Nessa página mesmo...

Copie o código abaixo e cole na barra de endereços, e então dê enter...

javascript:alert(document.getElementById('post-553535').style.display = 'none');

553535 é o ID desse meu post que você está lendo nesse momento ^^

Do mesmo jeito que você pode alterar atributos de um elemento, você pode fazer o mesmo com as variáveis. O poder é o mesmo.

Editado por fiote
Link para o comentário
Compartilhar em outros sites

  • 0

Entendi...

Elaborei um exemplo para impedir isso

Considere o seguinte exemplo:

<html>
<head>
<title>Teste de Jonathan Queiroz</title>
<script type="text/javascript">
onload=function(){
document.getElementById("cmdGanhar").onclick=ganhar
document.getElementById("cmdPerder").onclick=perder
}
function ganhar(){
alert("você ganhou")
}
function perder(){
alert("você perdeu")
}
</script>
</head>
<body>
<input type="button" id="cmdGanhar" value="Ganhar !">
<input type="button" id="cmdPerder" value="Perder !">
</body>
</html>
Observe agora o outro código:
<html>
<head>
<title>Teste de Jonathan Queiroz</title>
<script type="text/javascript">
onload=function(){
var x=new objTeste()
x.Use()
}
objTeste=function(){
//Métodos privados
var ganhar=function(){
alert("você ganhou !")
}
var perder=function(){
alert("você perdeu !")
}
//Método público para utilizar a classe
this.Use=function(){
document.getElementById("cmdGanhar").onclick=ganhar
document.getElementById("cmdPerder").onclick=perder
}
}
</script>
</head>
<body>
<input type="button" id="cmdGanhar" value="Ganhar !">
<input type="button" id="cmdPerder" value="Perder !">
</body>
</html>

Edit:

Postei o mesmo exemplo duas vezes^^

Agora está certo

Link para o comentário
Compartilhar em outros sites

  • 0

WOOOOOOOOOOOOOOOOOOOOOT WOTWOTWOTWOTWOTOWOTWOT

^^

Tentei x.ganhar(), objTeste.ganhar(), mas nada, nada funcionou...

Bizarro quando o você mais quer ouvir é "aff, não funciona".

Vou tentar implementar isso nas minhas 908921830921 classes ^^

Valeu Jonathan, você é o cara =D

EDIT

Apesar de que... se eu não consigo... será que as outras classes também não vão conseguir? elas precisam, lol

xDDD

Que mer**

Editado por fiote
Link para o comentário
Compartilhar em outros sites

  • 0

Se as outras classes estiverem dentro da classe principal, sim !

Isso porque a função é basicamente uma variável local

Também é possível fazer de outras formas, mas preferi assim porque seria possível adcionar métodos/propriedades públicos caso deseje, além de ser mais organizado

Outro exemplo para utilização:

onload=function(){
var ganhar=function(){
alert("você ganhou")
}
var perder=function(){
alert("você perdeu")
}
document.getElementById("cmdGanhar").onclick=ganhar
document.getElementById("cmdPerder").onclick=perder
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...