Ir para conteúdo

Criação de programas Desktop


Arkasher

Posts Recomendados

Opa, faz bastante tempo que não apareço aqui na GB, mas voltei pra tirar uma dúvida aqui (que eu pesquisei até no quintos dos infernos e não consegui achar uma forma 100% eficiente de resolver).

 

A dúvida é a seguinte: Como posso acessar um banco de dados em uma aplicação desktop distribuida?

Para sistemas de login, eu sei que posso fazer via web os pedidos. Mas e o resto?

Irei colocar aqui um exemplo de um jogo.

Existe um jogo X, e nesse jogo, cada usuário tem seu nível, suas moedas, equipamentos, etc. Tudo isso é salvo no banco de dados. Como eu posso manipular esses dados de forma segura? Sem que o usuário (que tenha experiência em programação) consiga manipular isso. Por exemplo, tem um servidor principal, que recebe esses dados e atualiza, e o servidor secundário, que envia os dados pro servidor principal, e esse servidor secundário, recebe os dados do usuário (quando o usuário compra algo, e precisa retirar moedas dele, por exemplo). Se o usuário criar algum mecanismo (como um Socket), que consegue enviar esses dados para o servidor, ele poderia simplesmente fazer as ações que enviariam os dados pro servidor secundário, burlando o sistema.

 

Sei que é meio difícil de entender (até pq eu posso ter explicado de uma forma bem "bugada"), mas como eu poderia resolver isso?

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

Em 04/01/2019 em 14:36, Arkasher disse:

Opa, faz bastante tempo que não apareço aqui na GB, mas voltei pra tirar uma dúvida aqui (que eu pesquisei até no quintos dos infernos e não consegui achar uma forma 100% eficiente de resolver).

 

A dúvida é a seguinte: Como posso acessar um banco de dados em uma aplicação desktop distribuida?

Para sistemas de login, eu sei que posso fazer via web os pedidos. Mas e o resto?

Irei colocar aqui um exemplo de um jogo.

Existe um jogo X, e nesse jogo, cada usuário tem seu nível, suas moedas, equipamentos, etc. Tudo isso é salvo no banco de dados. Como eu posso manipular esses dados de forma segura? Sem que o usuário (que tenha experiência em programação) consiga manipular isso. Por exemplo, tem um servidor principal, que recebe esses dados e atualiza, e o servidor secundário, que envia os dados pro servidor principal, e esse servidor secundário, recebe os dados do usuário (quando o usuário compra algo, e precisa retirar moedas dele, por exemplo). Se o usuário criar algum mecanismo (como um Socket), que consegue enviar esses dados para o servidor, ele poderia simplesmente fazer as ações que enviariam os dados pro servidor secundário, burlando o sistema.

 

Sei que é meio difícil de entender (até pq eu posso ter explicado de uma forma bem "bugada"), mas como eu poderia resolver isso?

Isso que você está falando é sobre arquitetura de sistemas. De uma olhada em arquitetura de 3 camadas (arquitetura multicamadas)

https://pt.wikipedia.org/wiki/Arquitetura_multicamada

https://www.diegomacedo.com.br/arquitetura-de-aplicacoes-em-2-3-4-ou-n-camadas/

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

16 horas atrás, Langsdorf disse:

Isso que você está falando é sobre arquitetura de sistemas. De uma olhada em arquitetura de 3 camadas (arquitetura multicamadas)

https://pt.wikipedia.org/wiki/Arquitetura_multicamada

https://www.diegomacedo.com.br/arquitetura-de-aplicacoes-em-2-3-4-ou-n-camadas/

Vou dar uma olhada lá, valeu!

(Se alguém ainda quiser fazer algum comentário, tópico tá ai)

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, Logikoz disse:

atualmente estou programando em C#, e estou gostando bastante da linguagem.

da uma olhada nesses videos relacionados a MySQL com C#

PlayList 5 videos

Sim, essa parte eu sei como funciona. A minha dúvida é como trocar dados entre servidor/cliente, sem que nenhum dado seja colocado na aplicação do cliente

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Arkasher disse:

Sim, essa parte eu sei como funciona. A minha dúvida é como trocar dados entre servidor/cliente, sem que nenhum dado seja colocado na aplicação do cliente

ou seja, você quer atualizar um dado especifico de um cliente, correto?

como por exemplo: joao, 500 moedas, 100h de jogo.

quer alterar para: joao, 250 moeds, 100h de jogo.

eh isso? se for olha o ultimo video da playlist...

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Logikoz disse:

ou seja, você quer atualizar um dado especifico de um cliente, correto?

como por exemplo: joao, 500 moedas, 100h de jogo.

quer alterar para: joao, 250 moeds, 100h de jogo.

eh isso? se for olha o ultimo video da playlist...

Vc ainda não entendeu, eu quero fazer isso sem expor os dados no programa do cliente, pq se eu for fazer do jeito que mostra na playlist, o cara pode simplesmente fazer engenharia reversa e pegar o acesso ao banco, ou algo nesse sentido

Link para o comentário
Compartilhar em outros sites

8 minutos atrás, Arkasher disse:

Vc ainda não entendeu, eu quero fazer isso sem expor os dados no programa do cliente, pq se eu for fazer do jeito que mostra na playlist, o cara pode simplesmente fazer engenharia reversa e pegar o acesso ao banco, ou algo nesse sentido

entao, me explica melhor oq vc quer...hkgfhkdf quer alterar oq exatamente...da um exemplo simples ai...

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Logikoz disse:

entao, me explica melhor oq vc quer...hkgfhkdf quer alterar oq exatamente...da um exemplo simples ai...

Trocar dados entre cliente - servidor de forma segura kkkkk

Ex: Quando o cara sair de uma partida, atualizar os dados dele, e para isso, eu poderia simplesmente alterar direto no MySQL, mas ai os dados iriam ficar escancarados lá para o usuário. Pra evitar isso, eu tenho que enviar um pedido pro servidor principal, e ele vai atualizar isso no MySQL. Quero saber como fazer essa segunda opção.

Link para o comentário
Compartilhar em outros sites

20 minutos atrás, Arkasher disse:

Trocar dados entre cliente - servidor de forma segura kkkkk

Ex: Quando o cara sair de uma partida, atualizar os dados dele, e para isso, eu poderia simplesmente alterar direto no MySQL, mas ai os dados iriam ficar escancarados lá para o usuário. Pra evitar isso, eu tenho que enviar um pedido pro servidor principal, e ele vai atualizar isso no MySQL. Quero saber como fazer essa segunda opção.

pensou na ideia de usar mais de um banco? um temporário e outro de armazenamento mesmo.

tipo: eu (CLIENTE) a partida acaba.

ai você manda por exemplo; os XPs que o cara ganhou na partida para o 1 banco (de preferencia, com uma criptografia sua.) 

depois manda para o outro banco (o oficial), e apaga todos os dados temporários do banco 1.

ai depois que você mostra os dados na tela pro jogador, ai caso ele tente alterar esses dados, irá alterar apenas pra ele, já que o banco principal não tem nenhum tipo de contato direto com o cliente.

 

e da mesma forma voce faz para pegar os dados do jogador quando ele entra no jogo. 

PRINCIPAL -> TEMPORÁRIO (CRIPTOGRAFADO)-> VARIÁVEL -> EXCLUI O TEMPORÁRIO -> VARIÁVEL mostra os dados na tela do jogador

 

você poderia fazer essa parte de transferências de dados, no momento que está na Splash Screen (carregando).

 

a parte que vai aparecer o XP na tela do jogador, você pode guardar em uma string antes de passar pro banco temporário, pois como eu havia dito, por mais que ele consiga alterar esse dado, irá afetar apenas a ele, e não o dado em si no banco.


OBS: ISSO É SÓ TEORIA MINHA, POR MAIS QUE EU CREIO QUE DARÁ CERTO (assim como usar o "inspecionar elemento" do navegador).

 

se não tiver entendido muito bem, me chama no discord, e eu te explico a ideia melhor '-'

 

?

Link para o comentário
Compartilhar em outros sites

14 minutos atrás, Logikoz disse:

pensou na ideia de usar mais de um banco? um temporário e outro de armazenamento mesmo.

tipo: eu (CLIENTE) a partida acaba.

ai você manda por exemplo; os XPs que o cara ganhou na partida para o 1 banco (de preferencia, com uma criptografia sua.) 

depois manda para o outro banco (o oficial), e apaga todos os dados temporários do banco 1.

ai depois que você mostra os dados na tela pro jogador, ai caso ele tente alterar esses dados, irá alterar apenas pra ele, já que o banco principal não tem nenhum tipo de contato direto com o cliente.

 

e da mesma forma voce faz para pegar os dados do jogador quando ele entra no jogo. 

PRINCIPAL -> TEMPORÁRIO (CRIPTOGRAFADO)-> VARIÁVEL -> EXCLUI O TEMPORÁRIO -> VARIÁVEL mostra os dados na tela do jogador

 

você poderia fazer essa parte de transferências de dados, no momento que está na Splash Screen (carregando).

 

a parte que vai aparecer o XP na tela do jogador, você pode guardar em uma string antes de passar pro banco temporário, pois como eu havia dito, por mais que ele consiga alterar esse dado, irá afetar apenas a ele, e não o dado em si no banco.


OBS: ISSO É SÓ TEORIA MINHA, POR MAIS QUE EU CREIO QUE DARÁ CERTO (assim como usar o "inspecionar elemento" do navegador).

 

se não tiver entendido muito bem, me chama no discord, e eu te explico a ideia melhor '-'

 

?

Entendi, é uma boa ideia, mas outra questão: Se o cara tiver experiência em programação, ele vai conseguir facilmente reverter a criptografia, pq a chave de algum jeito vai ter que estar no código

Link para o comentário
Compartilhar em outros sites

35 minutos atrás, Arkasher disse:

Entendi, é uma boa ideia, mas outra questão: Se o cara tiver experiência em programação, ele vai conseguir facilmente reverter a criptografia, pq a chave de algum jeito vai ter que estar no código

de fato, e quando ele conseguir fazer isso, esse dado nao vai estar mais la, pois a criptografia esta no banco temporário, e ele é excluído em questão de segundos, e não vai valer a pena '-'

 

sem falar que se tu seguir a logica, ele nem se quer conseguirá entrar no temporário.

 

outra coisa que você pode fazer, é usar a criptografia dentro do próprio jogo, pra guardar o valor, não na variável string que eu te falei.

 

tipo:

543tasgfgsd4543wh(valor que será en******** para o temporário) == 1500 coins(valor da criptografia "em string")

ele pode conseguir alterar a string, mas se você fizer o código correto, ele não conseguirá mudar o valor.

 

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...