.Net 测试项目的用户特定和秘密数据存储在哪里?

Posted

技术标签:

【中文标题】.Net 测试项目的用户特定和秘密数据存储在哪里?【英文标题】:Where to store user specific and secret data for .Net test project? 【发布时间】:2020-01-23 00:16:09 【问题描述】:

我有NUnit 测试项目,它正在测试一些远程服务的网关。

我有公钥/私钥来管理我在该服务上的帐户。

现在我将这些键存储在代码中。但对于用户特定和秘密数据来说,这是错误的方式。我必须对版本控制系统和其他人隐藏它。

那么,在哪里存储这样的数据更好?

我的想法:

环境变量 *.csproj.user(如果可能?) *.resx .runsettings(如果可能?)

我想使用*.csproj.user,但是否可以在此文件中存储和访问自定义数据?

【问题讨论】:

Can a unit test project load the target application's app.config file?的可能重复 如果你想让它难以破解,但不一定安全,另一种选择是使用 System.Security.Cryptography.ProtectedData 加密。使用 CurrentUser 范围对其进行加密。但是,请意识到使用该用户凭据运行的任何程序都可以解密数据。然后,将结果写入到 IsolatedStorage。这会将数据隐藏在临时用户之外,但对您的程序可用。这不是一个安全的解决方案,但除了坚定的黑客之外,其他所有人都很难破解(在这种情况下,这很容易)。 【参考方案1】:

除非用于测试并且帐户是假的,否则您应该力求永远不要存储用户凭据,绝对不要存储 SSH 密钥,除非它是 OEM 安全产品。

您最好在单元测试 SetUp 中创建随机帐户并使用这些帐户或模拟身份验证调用的结果。

通常您将测试数据存储在 CSV / Xslx 文件中,并且您通过要测试的方法执行的每一行值。您也可以使用数据库执行此操作。这是一个例子:https://***.com/a/6095773/495455

对于需要敏感访问凭证信息的方法,您应该使用无法用于危害系统的已知工作和非工作值进行隔离测试。

【讨论】:

【参考方案2】:
public static class ApiKeys 

    private static IConfiguration Config  get; set; 
    public static string PublicKey => Config.GetValue<string>( "service-public-key" );
    public static string SecretKey => Config.GetValue<string>( "service-secret-key" );


    static ApiKeys() 
        Config = new ConfigurationBuilder()
        .AddEnvironmentVariables()
        //.AddIniFile( "api-keys.ini", true ) // in this case you must add "api-keys.ini" to .gitignore file.
        .Build();
    



【讨论】:

以上是关于.Net 测试项目的用户特定和秘密数据存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在 GitLab 中安全地存储秘密和凭据

Django 设置和 GitHub 操作秘密

Windows OpenSSH ssh-agent 服务在哪里秘密存储私钥

SVN客户端在哪里存储用户认证数据?

Scala / Gradle 项目...在哪里存储单元测试所需的超大文件?

数据存储在哪里?