Question

Nous sommes dans le processus de rédaction d'un natif des applications windows (MFC) qui sera de télécharger certaines données de notre application web.Windows app permet à l'utilisateur d'ouvrir une session et après qu'il sera périodiquement télécharger certaines données de notre application web.Envoi sera fait par le biais de simples HTTP POST à notre application web.Le souci que je vais avoir est de savoir comment pouvons-nous nous assurer que le téléchargement est en fait venu de notre application, et non pas de curl ou quelque chose comme ça.Je suppose que nous sommes à la recherche à un certain genre de clé publique/clé privée de chiffrement ici.Mais je ne sais pas si nous pouvons, en quelque sorte, incorporer une clé publique dans notre victoire application exécutable et être fait avec elle.Ou serait-ce la clé publique sera trop facile à extraire et à utiliser à l'extérieur de notre application?

De toute façon, nous construisons les deux parties (client et serveur), donc à peu près tout est une option, mais il a de travailler via HTTP(S).Cependant, nous n'avons pas de contrôle de l'environnement d'exécution de gagner (le client) de l'app, en plus de l'utilisateur qui exécute l'application sur sa/son système est le seul qui se situe à acquérir quelque chose en jeu le système.

Était-ce utile?

La solution

En fin de compte, il n'est pas possible de prouver l'identité de l'application de cette manière quand il est en cours d'exécution sur une machine qui ne vous appartient pas.Vous pouvez inclure des touches, jouer avec les hachages et les sommes de contrôle, mais à la fin de la journée, tout ce qui repose sur l'exécution de code sur quelqu'un d'autre de la machine peut être falsifiée.Les touches peuvent être extraites, le code peut être à l'ingénierie inverse - tout est la sécurité par l'obscurité.

Passer votre temps à travailler sur la validation et le nettoyage des données, et si on veut vraiment faire quelque chose, de sécuriser l'utilisateur final avec un certificat client.Autre chose c'est juste une perte de temps et un faux sentiment de sécurité.

Autres conseils

À propos de les meilleures que vous pourriez faire serait d'utiliser le protocole HTTPS avec des certificats clients.Sans doute avec l' WinHTTP's de l'interface.

Mais je ne sais pas si nous pouvons, en quelque sorte, incorporer une clé publique dans notre victoire application exécutable et être fait avec elle.

Si le client de s'identifier sur le serveur, il devrait être la clé privée intégré.

Ou serait-ce trop facile à extraire et à utiliser à l'extérieur de notre application?

Si vous n'avez pas le contrôle de l'application client de l'environnement d'exécution, de tout ce que votre application peut ne peut être analysé, automatisée et reproductible par un attaquant qui ne contrôle que de l'environnement.

Vous pouvez mettre obfuscatory couches autour de la procédure de présentation de communications, si vous devez, mais vous ne serez jamais à résoudre le problème.Multijoueur jeux ont essayé de le faire depuis des années pour lutter contre la triche, mais à la fin c'est juste un obscurcissement de la course aux armements qui ne pourra jamais être gagnée.Blizzard ont bien plus de ressources que vous avez, et ils ne peuvent pas gérer ce soit.

Vous n'avez aucun contrôle sur les fichiers binaires une fois que votre application est distribuée.Si tous la signature et le chiffrement de la logique de résider dans votre exécutable, il peut être extrait.Intelligent codeurs vont trouver le code et construire des systèmes interopérables quand il y a assez de motivation pour le faire.C'est pourquoi les DRM ne fonctionne pas.

Un système complexe d'attacher une clé pour l'adresse MAC d'un PC, par exemple, est sûr d'échouer.

Ne faites pas confiance à un particulier exécutable ou d'un système, mais la confiance de vos utilisateurs.Confier à chacun d'eux avec un fichier de clé privée protégée par un mot de passe et de leur expliquer comment qui touche les identifier comme les auteurs de contenu sur votre service.

Puisque vous êtes le contrôle du client, vous pouvez ainsi intégrer la clé dans l'application, et assurez-vous que les utilisateurs n'ont pas accès en lecture à l'application de l'image, vous aurez besoin de séparer la logique à 2 niveaux - 1 que l'utilisateur exécute, l'autre qui se connecte au service via HTTP(S) - depuis l'utilisateur aura toujours un accès en lecture à une application qu'il est en cours d'exécution.

Si je comprends bien, les données sont envoyées automatiquement après la session de l'utilisateur - ce qui sonne comme seulement le service est nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top