Pergunta

Estamos no processo de escrever um aplicativo nativo do Windows (MFC) que enviará alguns dados para nosso aplicativo da web.O aplicativo do Windows permitirá que o usuário faça login e depois disso fará upload periódico de alguns dados para nosso aplicativo da web.O upload será feito via HTTP POST simples para nosso aplicativo web.A preocupação que estou tendo é como podemos garantir que o upload realmente veio do nosso aplicativo, e não do curl ou algo parecido.Acho que estamos analisando algum tipo de criptografia de chave pública/privada aqui.Mas não tenho certeza se podemos de alguma forma incorporar uma chave pública em nosso executável do aplicativo win e pronto.Ou seria muito fácil extrair e usar essa chave pública fora do nosso aplicativo?

De qualquer forma, estamos construindo os dois lados (cliente e servidor), então praticamente qualquer coisa é uma opção, mas precisa funcionar através de HTTP(S).No entanto, não controlamos o ambiente de execução do aplicativo win (cliente), além disso, o usuário que está executando o aplicativo em seu sistema é o único que pode ganhar algo ao jogar o sistema.

Foi útil?

Solução

Por fim, não é possível provar a identidade de um aplicativo dessa maneira quando estiver em execução em uma máquina que você não possui. Você pode incorporar chaves, brincar com hashes e somas de cheques, mas no final do dia, qualquer coisa que depende do código que executa na máquina de outra pessoa pode ser falsificado. As chaves podem ser extraídas, o código pode ser de engenharia reversa- é tudo a segurança através da obscuridade.

Gaste seu tempo trabalhando na validação e na limpeza de dados e, se você realmente deseja garantir algo, proteja o usuário final com um certificado de cliente. Qualquer outra coisa é apenas uma perda de tempo e uma falsa sensação de segurança.

Outras dicas

Sobre o melhor que você poderia fazer seria usar o HTTPS com certificados de cliente. Presumivelmente com WINHTTPinterface.

Mas não tenho certeza se podemos de alguma forma incorporar uma chave pública em nosso aplicativo Win App e terminar com ela.

Se o cliente estiver se identificando para o servidor, ele teria que ser a chave privada incorporada.

Ou seria muito fácil extrair e usar fora do nosso aplicativo?

Se você não controlar o ambiente de execução do aplicativo do cliente, qualquer coisa que seu aplicativo possa fazer poderá ser analisada, automatizada e reproduzida por um invasor que controla esse ambiente.

Você pode colocar camadas ofuscórias em torno do procedimento de comunicação, se necessário, mas nunca resolverá o problema. Os jogos multiplayer estão tentando fazer isso há anos para combater a trapaça, mas no final é apenas uma corrida armamentista ofusca que nunca pode ser vencida. A Blizzard tem muito mais recursos do que você, e eles também não conseguem gerenciar.

Você não tem controle sobre os binários depois que seu aplicativo é distribuído.Se toda a lógica de assinatura e criptografia residir no seu executável, ele poderá ser extraído.Codificadores inteligentes descobrirão o código e construirão sistemas interoperáveis ​​quando houver motivação suficiente para fazê-lo.É por isso que o DRM não funciona.

Um sistema complexo que vincula uma chave ao endereço MAC de um PC, por exemplo, certamente falhará.

Não confie em um executável ou sistema específico, mas confie em seus usuários.Confie a cada um deles um arquivo de chave privada protegido por uma senha e explique como essa chave os identifica como remetentes de conteúdo em seu serviço.

Como você está controlando o cliente, também pode incorporar a chave no aplicativo e garantir que os usuários não tenham acesso à imagem do aplicativo - você precisará separar a lógica para 2 camadas - 1 que o O usuário é executado, o outro que se conecta ao serviço sobre HTTP (s) - como o usuário sempre terá acesso a um aplicativo que ele está executando.

Se eu entendi corretamente, os dados são enviados automaticamente após o login do usuário - isso parece que apenas a parte do serviço é necessária.

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