c++ - 如何在 C++ 应用程序中安全地存储字符串(即密码)?

标签 c++ string security

我正在开发一个 wxWidgets GUI 应用程序,它允许用户将文件上传到 FTP 服务器,并且需要一对用户名/密码才能访问 FTP 服务器。

据我所知,STL 字符串甚至 char* 字符串对于最终用户是可见的,即使程序已经编译,使用十六进制编辑器或字符串提取器,如 Sysinternals String Utility .

那么,在 C++ 应用程序中是否有一种安全/可靠的方法来存储敏感信息?

附言。我不能为此应用程序使用 .NET。

最佳答案

这实际上与所使用的编程语言无关。

FTP 是一种以纯文本形式传输密码的协议(protocol)。任何混淆都不会改变这一点,攻击者可以在传输密码时轻松拦截密码。

无论使用何种协议(protocol),再多的混淆也无法改变您的应用程序必须能够解码该密码的事实。任何有权访问应用程序二进制文件的攻击者都可以对该解码进行逆向工程,从而生成密码。

一旦您开始研究安全 协议(protocol)(如 SFTP),您在研究自动访问时也会获得用于安全 身份验证的基础设施(例如公钥/私钥)。

即使那样,您也有责任不让文件系统上的任何其他人都可以访问该 key 文件,这可能还不够,具体取决于操作系统和整体设置。

但由于我们讨论的是交互式应用程序,最简单的方法是完全不自动进行身份验证,而是向用户查询用户名和密码。毕竟,他应该知道,不是吗?

编辑:扩展 Kate Gregory 的精彩评论,如果用户共享一个共同的“技术”(或匿名)帐户访问您的服务器,您的应用上传的文件不应在在您完成某种过滤之前的服务器。这样做的常用方法是有一个“上传”目录,文件可以上传到其中,但不能从中下载。如果您不采取这些预防措施,人们将把您的 FTP 服务器用作各种非法文件共享的转盘,将为此承担法律责任。

关于c++ - 如何在 C++ 应用程序中安全地存储字符串(即密码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457955/

相关文章:

c++ - 头文件中的模板实例化

java - 替换字符串中特定位置的字符

c# - 如何在 C# .NET 中像 Java 代码一样加密

c++ - 如何将 DLL 注入(inject)任何进程?

android - 如何在没有密码的情况下在android中存储私钥

c++ - 堆栈溢出使用 libzip 创建存档

c++ - 如何使用来自 int 值的数字符号初始化 char 数组?

javascript - `string.replace` 不改变变量

c++ - std::endl 在字符串变量中?

c++ - 是否有可能编写一个真正通用的磁盘烘焙 B+Tree 实现?