安全地存储用户凭据(用户名/密码组合)以供自动化测试使用

4

问题

我正在创建一组自动化测试,需要提供用户名和密码才能登录到要测试的应用程序。我有一个函数LogOnToApplication(string username, string password),它接受字符串格式的登录信息,并登录到应用程序。目前,我正在定义两个字符串如下:

string username = "username";
string password = "supersecretpassword";

我需要将这段文本传递给我的函数

utilities.LogOnToApplication(username, password);

这种方法在我的测试中效果很好,但我知道这样做是有风险和不安全的。这些测试被广泛分发,以这种方式设置我的测试很容易导致安全漏洞。

问题

从我的代码中删除usernamepassword字符串的最佳方法是什么?我考虑过创建一个单独的文件来存储这些信息,并在需要信息时从该文件中提取,但这并不能解决问题,只是将敏感信息转移了位置。


使用某种加密方式来保护你的字符串,这是最简单和安全的方法。 - lokusking
1
将您的服务器转换为Docker镜像,并在运行自动化测试之前启动它们,在完成后停止它们。这样,开发环境中的密码就真的无关紧要了... - Meirion Hughes
你确定需要广泛分发连接到服务器的特权测试吗?不确定这是否可行。 - elyashiv
@nate请看这里:(https://dev59.com/7Jnga4cB1Zd3GeqPbaBn#38816208) - lokusking
@lokusking 如果我必须在那里键入字符串才能运行encrypt方法,那么这如何解决硬编码密码的问题呢? - Pseudo Sudo
显示剩余6条评论
2个回答

0

正如我在评论中所写的,我认为你想要做的确切事情是不可能的。在某个时候,你的程序将需要运行以下代码行utilities.LogOnToApplication(username, password);其中用户名和密码是明文字符串。如果程序正在我的计算机上运行,我可以连接调试器并获取数据。有一些方法可以使它更难,但这场战斗是黑客和游戏开发人员之间的,而失败者就是你试图加入的一方。

最安全的做法是重新考虑测试-你真的需要“广泛分发”吗?如果不需要,那就不要。

有一些方法可以使获取u/p更加困难,这完全取决于你愿意投入多少努力。


0

您可以将它们放在 App.Config 文件的 AppSettings 下,并使用 ConfigurationManager 获取它们。

设置代码:

<appSettings>
  <add key="username" value="lol" />
  <add key="password" value="hunter2" />
</appSettings>

并且访问它们

var username = ConfigurationManager.AppSetting["username"];
var password = ConfigurationManager.AppSetting["password"];

好的,它将超出应用程序。测试的具体细节并没有给出,但可以根据运行测试的用户进行具体设置,或者至少可以更改。它们需要来自某个地方。诸如API令牌等凭据应放在配置中。这与放置DB连接字符串的位置相同,我认为这非常敏感。 - James Ralston
正确和敏感并不能保证安全。 - elyashiv
返回翻译的文本:是的,在大多数情况下,拥有访问配置文件的权限意味着拥有访问计算机和管理员权限(如果文件权限被设置为这样)。理想情况下,这应与某些特定主机凭据配对使用。 - James Ralston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接