如何将 Web 应用程序的登录名和密码数据传递到桌面应用程序而不造成任何安全风险

Posted

技术标签:

【中文标题】如何将 Web 应用程序的登录名和密码数据传递到桌面应用程序而不造成任何安全风险【英文标题】:How to pass login and password data for a web app to a desktop application without causing any security risks 【发布时间】:2011-04-05 12:42:20 【问题描述】:

所以我想做以下事情: 一个人在线注册并为桌面和 Web 应用程序选择登录名和密码(两个应用程序的登录名和密码相同) 然后他们下载桌面应用程序(用 C++ 和 Qt 编写,因为它是跨平台的) 然后登录名和密码会自动传递给桌面应用程序,而无需人员输入此数据。登录名和密码用于向服务器进行身份验证。

桌面应用程序的每个版本都需要根据用户在网页上注册的事实分别使用用户的登录名和密码进行编码。

所以这里有一个更简单的解释: 1.用户在网站上注册并选择登录\密码 2.用户在自己的电脑上下载桌面客户端 3. 用户运行桌面客户端(C++ 二进制文件),并从步骤中询问登录名/密码

我希望该软件首次在步骤 3 中自动填写登录名/密码。是否可以?如何在没有安全风险的情况下完成?

【问题讨论】:

更新问题。我打算以完全不同的方式解决这个问题。他们将在软件上注册,而不是在线注册的人,然后数据将在线发送。 【参考方案1】:

主要问题是,任何人都可以执行该程序并获得对用户帐户的访问权限。我建议使用一次性登录来使用随机令牌进行首次身份验证,并在第一次启动后,通过 ssl 连接获取用户/密码信息。之后删除您的一次性登录令牌并将其替换为实际登录。

我真的不知道您是在要求精确的代码示例还是只是想了解一个基本概念......但无论如何,将登录数据存储在应用程序本身中存在安全风险。

【讨论】:

谢谢。我认为是的,这是一个安全风险,但想知道是否有办法绕过安全风险。如果有一次性代币,那将如何降低风险?不寻找精确的代码示例,只是大致了解如何做。我有一个由 8 人组成的团队从事这个项目。基本上我们是在说它做不到,但我总是倾向于认为必须有办法做到这一点。 当您使用一次性令牌时,您会生成它并且用户下载应用程序并可能在几分钟内执行它。之后,将创建一个常规登录并将其存储在应用程序数据中,因此仅存在一个包含登录信息的本地副本。一次性令牌通常只能访问几分钟,这使得攻击者很难窃取信息。好吧,这只是一点点改进……对于更高级的安全性,您可以考虑使用 DRM,例如。在应用商店中。【参考方案2】:

您看过 HTTP 身份验证吗? 我不完全了解 QT 应用程序的下载过程,但是,如果您在 Web 服务器上使用 Basic/Digest 身份验证,则传播身份验证令牌将既简单又安全。 基本使用 64 基编码,Digest 使用 MD5 散列。许多库都实现了这些步骤(Java 世界中的 Spring Security 和 Shiro)。

【讨论】:

【参考方案3】:

我看到了两种方法:

服务器可以为用户提供下载安装包的唯一链接。通过唯一的一次性密码打包的服务器补丁。这样客户就可以第一次登录了 浏览器收集有关用户计算机的一些信息。例如IP、MAC、操作系统版本等。然后根据这些数据计算计算机的数字签名。 C++ 二进制文件也是如此。您可以将该数字签名用作一次性密码。

【讨论】:

以上是关于如何将 Web 应用程序的登录名和密码数据传递到桌面应用程序而不造成任何安全风险的主要内容,如果未能解决你的问题,请参考以下文章

如何使用角度cors和nodejs隐藏登录名和密码

如何最好地存储用户信息和用户登录名和密码

如何最好地存储用户信息和用户登录名和密码

数据库中的登录名和密码存储

如何在应用程序中保存用户登录名和密码

如何创建与 iOS 版 Facebook 应用程序中相同的登录名和密码字段