Jump to content

Comunicação com servidor - Sugestões


scorch
 Share

Recommended Posts

Eu estou a fazer uma aplicação simples, mas que necessita de comunicar com o servidor. Só que eu queria que os ficheiros (em PHP) apenas executassem se fosse um request vindo da aplicação, para que os utilizadores não pudessem aceder através de um browser e "falsificar" os dados. O problema é que acho que isto não é possível. O que é que sugerem para esta situação? :dontgetit:

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Bem, a solução mais óbvia parece-me ser passar uma cadeia de dados qualquer no cabeçalho que seja conhecida apenas por as duas partes, mas qualquer ferramenta como o fiddler te dá a volta à coisa.

Passar uma cadeia no cabeçalho, mas ir variando periódicamente já era mais qualquer coisa.

Terias era de arranjar um sistema para ir variando a cadeia... Variar a cada request é que era ideal.

Achas que podes detalhar mais a coisa? Quem sabe se não inspira.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Por exemplo. Eu faço um request a uma página web PHP e passo os dados por QueryString, para por exemplo, dizer qual foi o utilizador que ganhou um jogo e com x tempo. Ora, se o utilizador fizer o request pelo browser, consegue enganar a aplicação.

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Assinar o cabeçalho continua a ser o que mais me faz sentido, para uma solução rápida.

Desencoraja os que se lembrarem de "snifar" o request para o espetar num browser e entretanto pode te dar "arcabouço" para uma solução mais robusta.

Enfim, ambiente web não é o meu "cup of tea".

Há-de haver quem tenha outro método/ideia 🙂

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

O problema é que os cálculos que a aplicação supostamente teria de fazer, seriam possíveis de replicar com outra aplicação, e assim voltava-mos ao mesmo.  🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Ora, se vais pensar assim, mais vale dares o URL a piscar.

Nada é seguro enquanto for o próprio homem a preparar a lógica da segurança.

Como contactos alienígenas não têm estado em altas ultimamente, arranja um sistema teu que vais melhorando à medida que as "breaches" forem soando.

Nada é perfeito 🙂

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Eu estou a fazer uma aplicação simples, mas que necessita de comunicar com o servidor. Só que eu queria que os ficheiros (em PHP) apenas executassem se fosse um request vindo da aplicação, para que os utilizadores não pudessem aceder através de um browser e "falsificar" os dados. O problema é que acho que isto não é possível. O que é que sugerem para esta situação? :dontgetit:

Os ficheiros de PHP vão estar alojados num servidor FTP ? Se sim, podes muito bem fazer o que pretendes (se bem percebi a "coisa" 😄 )

Como default, o ficheiro que pretendes que haja um request vindo da aplicação, não está no servidor. Quando precisares dele, então, pela aplicação, envias-o para o servidor FTP, estando operacional.

Queres desactivar o ficheiro via aplicação? Também é fácil.

Link to comment
Share on other sites

Eu não vou estar a mexer nos ficheiros que vão estar no servidor, porque poderão estar várias aplicações a aceder ao servidor ao mesmo tempo. 😄

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Realmente estás ai com um certo problema. Queres confiar numa aplicação que entregas ao impostor... Queres autenticar uma aplicação e para isso ela tem de saber um segredo, mas se entregas a aplicação também entregas o segredo.

É uma questão de andar às voltas a ver qual a forma de dar mais trabalho ao impostor até descobrir o segredo lol 

Tu queres mesmo que seja a tua aplicação a aceder ao servidor e não outra, não é? Mas e se não tiver de ser assim? E se arranjares forma de não te importares que não seja a tua aplicação a aceder ao servidor? Basta que essa aplicação cumpra as regras, supervisionadas pelo servidor e que a tua aplicação vai respeitar! Isso é possível? Eu não sei o que estás a fazer mas sei lá.... nalguns casos é possível.

Link to comment
Share on other sites

Não, pois por exemplo, o objectivo é enviar o tempo que uma pessoa demorou a fazer x coisas, e quanto menos tempo, obviamente, melhor. Sendo assim, no servidor ele não pode validar se o tempo está correcto, pelo que a pessoa vai puder enviar ela o tempo que quiser.

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Aplicando a sugestão do ribeiro, se os dados não são confidenciais, podes passá-los no URL por GET, junto com uma síntese segura, por exemplo, em MD5. Essa síntese é calculada através da pontuação, junto com salt, por exemplo:

Pontuação: 1500

Jogador: Scorch

Salt: jogaoDoScorch (este salt é o teu segredo partilhado entre aplicação e servidor)

Síntese: md5('Scorch1500jogaoDoScorch') = 9205d4fd3d0ac8286be336c6a12194a6

Exemplo do request: /submitScore.php?score=1500&player=Scorch&confirmhash=9205d4fd3d0ac8286be336c6a12194a6

Do lado do servidor, tudo o que tens a fazer é o seguinte:

- Juntar todas as informações de modo análogo ao processo de cálculo da síntese

- Calcular a síntese

- Se a síntese enviada não existir ou não corresponder

-- echo "you cheater 😄 "

- senão

-- regista a pontuação

Para isto, tens de ter em conta as diferenças do cálculo da síntese entre o PHP e o VB.net. Existem tutoriais para VB.net de como gerar sínteses seguras com recurso a uma chave (HMAC), mas não são esses que te interessam, pois a cada chave diferente, o resultado também é diferente, para o mesmo conteúdo.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Não creio que seja assim tão fácil. Mas tudo depende da robustez e da forma como geras o hash. Por exemplo, se o atacante souber a ordem dos elementos, ele sabe que o salt está no fim, e é por aí que vai atacar.

Mas se isso vai ser opensource, então não te deves basear num salt/segredo (até porque não vai ser segredo...). O ideal seria usar criptografia assimétrica, em que distribuías a chave pública com o teu programa (que cifrava os dados), e o teu servidor tinha a chave privada, com a qual decifrava os dados.

Agora, não faço a menor ideia se isso é exequível no teu caso, porque usas duas tecnologias diferentes (PHP, e VB.net).

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Agora que vejo, nem isso te vai servir. Como tu vais distribuir o código, qualquer um consegue fazer um cliente alterado, e por exemplo, cifrar uma mensagem, com scores exorbitantes: basta ter a chave,e o teu algoritmo.

Sinceramente, neste caso não vejo solução, também fico à espera de mais dicas/sugestões.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Ai isso é para ser source code? Então mais vale estares quieto lol...

Basta ir ao código trocar a linha em que envias para o servidor o tempo registado, e colocar o valor baixinho....

Se queres apenas que a mensagem não vá em claro para o servidor, então cifra, mas não vejo a vantagem de estar a meter cifra assimétrica...

Isso era bom se não quisesses que alguma vez na vida fosse decifrado o conteúdo da mensagem enviada para o servidor, mas isso não é crucial, o teu problema não é de privacidade, é de autenticação. Se usares chave simétrica é praticamente a mesma coisa.

Quem se der ao trabalho de ir ao código ver a cifra simétrica, decifrar uma mensagem, construir outra falsa, cifra-la e envia-la; também se dá ao trabalho de ir ao código ver como é construída a mensagem, construir uma falsa, encontrar a chave pública no código, cifrar a mensagem, e envia-la..............

Também vou ficar à espera duma solução genial 😕

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.