Autenticação / Token / Validação

59 views
Skip to first unread message

Matheus Piscioneri

unread,
Jun 11, 2015, 3:08:48 PM6/11/15
to androidb...@googlegroups.com
Boa tarde galera.

Tenho um app que não tem login nem qualquer tipo de autenticação.
Em determinado momento da aplicação, preciso enviar alguns dados que o usuário forneceu a web. Para isso estou utilizando o Volley e enviando por POST para um WebService que criei.
Gostaria de saber se tem alguma forma para eu verificar que  esse POST realmente esta sendo feito pelo app, para impedir que pessoas má intencionadas façam a engenharia reversa no app, descubra a URL e faça um robozinho para ficar mandando POST com informações fakes para o Web Service.

Conhecem alguma forma?


Lucas Emmanuel

unread,
Jun 12, 2015, 8:30:30 AM6/12/15
to androidb...@googlegroups.com
Matheus, pensei em uma coisa fácil e não sei se vai ser das melhores... mas cria uma variável string static ai com uma hash para todos os apps e manda ela na hora do POST...

Matheus Piscioneri

unread,
Jun 12, 2015, 8:34:47 AM6/12/15
to androidb...@googlegroups.com
Iai Lucas.

Pensei em uma alternativa assim também, mas se o cara fizer engenharia reversa e ver esse Hash, ele tbm conseguirá postar.
Tem alguma forma de "esconder" esse Hash?

Gink Labrev

unread,
Jun 12, 2015, 10:12:27 AM6/12/15
to androidb...@googlegroups.com
Cara,

Cria um token no server, envie para sua app e só consegue postar apps autenticadas.

Isso aqui deve te ajudar.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Matheus Piscioneri

unread,
Jun 12, 2015, 3:46:39 PM6/12/15
to androidb...@googlegroups.com
Gink, no exemplo que você mandou, entendi que os caras criam um hash com o User e Pass, mas se eu consigo ver esses dados, também posso gerar uma aplicação com esse hash e burlar? Não é?

No caso do que você falou, de gerar um token no server, como eu identifico no app se esse token é válido? E nesse caso, vou ter que fazer sempre uma requisição a mais, toda vez que tiver que comunicar com o server.


Rômulo Nadler

unread,
Jun 12, 2015, 4:02:44 PM6/12/15
to androidb...@googlegroups.com
Matheus,

Eu faria assim: no aplicativo geraria um hash que seria um calculo da DATA + HORA com um verificador, no server fazia o processo reverso. Quanto a questão de capturarem o hash e tentarem usar é só checar se faz 1 minuto que passou da data e hora se sim, provavelmente ele foi clonado...a idéia seria essa

Matheus Piscioneri

unread,
Jun 12, 2015, 4:08:08 PM6/12/15
to androidb...@googlegroups.com
Rômulo, será que a questão de fuso horário pode interferir nessa verificação? E se o cara malicioso fizer um loop gerando sempre o hash com a data, hora e o identificador e ficar postando? 

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/8iY10H2iW44/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Rômulo Nadler

unread,
Jun 12, 2015, 4:25:54 PM6/12/15
to androidb...@googlegroups.com
O verificador seria um cálculo seu como o digito verificador do cpf...
Quando chegar no servidor você saberá que seu aplicativo que esta enviado devido ao digito verificador
Se for clonado terá passado x segundos ou minutos... só teria que ver a questão de fuso.

Marcelo Alves

unread,
Jun 12, 2015, 4:26:10 PM6/12/15
to androidb...@googlegroups.com
Vocês estão reinventando OAuth.​

Se quiser "garantir" um pouco mais de segurança, pode tentar usar autenticação mútua (https://en.wikipedia.org/wiki/Mutual_authentication ), mas isso também não impede (só atrasa), alguém de fazer engenharia reversa e usar seu certificado, já que ele tem que estar local. Vantagem é que periodicamente você pode revogar o certificado e forçar usuários a atualizar o app.


Gink Labrev

unread,
Jun 12, 2015, 8:29:09 PM6/12/15
to androidb...@googlegroups.com
Matheus,

A maneira mais prática é salvar esses tokens em Redis. Assim o tempo gasto para verificar a existência do token é praticamente insignificante, pois ocorre na memória, não no disco.

Não é necessário fazer duas requisições. Você irá usar um hash e alocará este no cabeçalho "Authorization".
Há bibliotecas prontas para isso, de forma que não é necessário fazer manualmente.
Um exemplo é a com.squareup.okhttp.Credentials.basic(String userName, String token). A string retornada é o hash no formato basic auth.
Como seu app não usa userName, pelo que entendi, este pode ser o nome da sua app mesmo (ou qq constante).

O importante é garantir que você é capaz de gerar uma chave de rápido acesso no servidor e o garantir que a app irá acoplá-la nas requisições.

O OAuth tb serve, mas é de implementação mais complexa. O basic auth, como o nome diz, é mais básico e atende seu caso.

Em 12 de junho de 2015 17:26, Marcelo Alves <marcel...@gmail.com> escreveu:
Vocês estão reinventando OAuth.​

Se quiser "garantir" um pouco mais de segurança, pode tentar usar autenticação mútua (https://en.wikipedia.org/wiki/Mutual_authentication ), mas isso também não impede (só atrasa), alguém de fazer engenharia reversa e usar seu certificado, já que ele tem que estar local. Vantagem é que periodicamente você pode revogar o certificado e forçar usuários a atualizar o app.


Matheus Piscioneri

unread,
Jun 14, 2015, 10:38:28 PM6/14/15
to androidb...@googlegroups.com
Obrigado pelas respostas.

Estou tentando utilizar o getHeaders() do Volley para passar uma hash com Base64

getParams() estou enviando e pego no PHP por POST, vocês sabem como eu pego a hash que estou enviado pelo getHeaders() no PHP?

Gink Labrev

unread,
Jun 15, 2015, 10:30:51 AM6/15/15
to androidb...@googlegroups.com
Acho que pode lhe ajudar

Matheus Piscioneri

unread,
Jun 17, 2015, 7:38:40 AM6/17/15
to androidb...@googlegroups.com
Muito obrigado Gink.

Vou estudar isso!!
Reply all
Reply to author
Forward
0 new messages