繁体   English   中英

如何确保HTTP上传来自可靠的可执行文件

[英]How to ensure HTTP upload came from authentic executable

我们正在编写一个本地Windows应用程序(MFC),它将一些数据上传到我们的网络应用程序。 Windows应用程序将允许用户登录,之后它将定期将一些数据上传到我们的Web应用程序。 上传将通过简单的HTTP POST传输到我们的网络应用程序。 我担心的是我们如何确保上传实际上来自我们的应用程序,而不是来自curl或类似的东西。 我想我们在这里看一些公钥/私钥加密。 但我不确定我们是否能以某种方式在我们的win app可执行文件中嵌入一个公钥并完成它。 或者,这个公钥是否太容易在我们的应用程序之外提取和使用?

无论如何,我们正在建立双方(客户端和服务器),所以任何东西都是一个选项,但它必须通过HTTP(S)。 但是,我们不控制win(客户端)应用程序的执行环境,而且在他/她的系统上运行应用程序的用户是唯一一个通过游戏系统获得某些东西的用户。

最终,当它在你不拥有的机器上运行时,不可能以这种方式证明应用程序的身份。 你可以嵌入密钥,使用哈希和校验和,但在一天结束时,任何依赖于在其他人的机器上运行的代码的东西都可以被伪造。 可以提取密钥,可以对代码进行反向工程 - 通过默默无闻的方式实现所有安全性。

花时间进行验证和数据清理,如果您真的想要保护某些东西,请使用客户端证书保护最终用户。 其他任何事情只是浪费时间和虚假的安全感。

关于您可以做的最好的事情是将HTTPS与客户端证书一起使用。 想必与WinHTTP的界面。

但我不确定我们是否能以某种方式在我们的win app可执行文件中嵌入一个公钥并完成它。

如果客户端要向服务器标识自己,则必须是嵌入的私钥。

或者在我们的应用程序之外提取和使用它是否太容易了?

如果您不控制客户端应用程序的执行环境,那么您的应用程序可以执行的任何操作都可以由控制该环境的攻击者进行分析,自动化和复制。

如果必须,您可以在通信过程周围放置混淆层,但是您永远不会解决问题。 多人游戏多年来一直试图这样做以打击作弊行为,但最终它只是一场模糊的军备竞赛,永远无法赢得。 暴雪拥有比你更多的资源,他们也无法管理它。

分发应用后,您无法控制二进制文件。 如果所有签名和加密逻辑都驻留在可执行文件中,则可以将其解压缩。 聪明的编码人员会在有足够动力的情况下找出代码并构建可互操作的系统。 这就是DRM不起作用的原因。

例如,将密钥绑定到PC的MAC地址的复杂系统肯定会失败。

不要相信特定的可执行文件或系统,而是信任您的用户。 使用密码保护的私钥文件委托每个密钥文件,并向他们解释该密钥如何将它们标识为您服务上的内容提交者。

由于您正在控制客户端,因此您可以在应用程序中嵌入密钥,并确保用户没有对应用程序映像的读取权限 - 您需要将逻辑分为2层 - 1表示用户运行,另一个通过HTTP(S)连接到服务 - 因为用户将始终具有对正在运行的应用程序的读访问权。

如果我理解正确,数据会在用户登录后自动发送 - 这听起来只需要服务部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM