【问题标题】:Manage sensitive Options data in VSPackage管理 VSPackage 中的敏感选项数据
【发布时间】:2020-08-25 09:16:55
【问题描述】:

我正在开发一个需要连接到数据库的 Visual Studio 扩展包 (VSIX)。

我还想在存储敏感配置时采取合理的安全措施。

目前,我正在为我的插件使用标准的属性网格选项页面,如 introductory documentation 中所述用于 Visual Studio 扩展。

public class MyPackageOptions : DialogPage
{
    [Category("Repository")]
    [DisplayName("Server")]
    [Description("Database host name or IP address")]
    public String Server { get; set; }

    [Category("Repository")]
    [DisplayName("Port")]
    [Description("Database listen port")]
    public UInt16 Port { get; set; } = 3306;

    [Category("Repository")]
    [Description("Database name")]
    public String Database { get; set; } = "default_database_name";

    [Category("Repository")]
    [DisplayName("User ID")]
    [Description("Database login user name")]
    public String UserId { get; set; }

    // BUG PasswordPropertyTextAttribute doesn't seem to be having the desired effect
    [Category("Repository")]
    [Description("Database login password")]
    [PasswordPropertyText]
    public String Password { get; set; }
}

CategoryDisplayNameDescription 属性在属性网格显示上具有我所期望的效果。但是PasswordPropertyTextAttribute 似乎没有任何效果。是否有其他方法可以使文本屏蔽与基本的基于属性网格的选项页面一起使用?还是我需要制作自定义选项 UI 表单来获取文本屏蔽?

其次,我如何确保密码字段值以相当安全的方式保存在磁盘上,类似于其他需要存储用户凭据的软件?根据我的需要,我认为使用当前用户帐户的 Windows DPAPI 保护就足够了,但我不确定如何使用它来保护 MyPackageOptions.Password 属性。

【问题讨论】:

    标签: c# vsix vspackage dpapi


    【解决方案1】:

    要使PasswordPropertyTextAttribute 生效,必须通过将其Password 属性设置为true 来“打开”它。如果使用默认构造函数,则Password属性为false,属性无效。

    使其工作的最简单方法是使用[PasswordPropertyText(true)] 行而不是[PasswordPropertyText] 将属性添加到属性,以调用适当的非默认构造函数。

    可以通过覆盖DialogPageLoadSettingsFromStorageSaveSettingsToStorageLoadSettingsFromXmlSaveSettingsToXml 方法来加密持久化选项值,如this answer 中所述。

    实现自定义TypeConverter 来处理加密/解密(类似于this approach)没有用处,因为相同的TypeConverter 用于在PropertyGrid 中转换为/从字符串值转换,也用于持久化Visual Studio 注册表或 XML 导出中的值。因此,如果转换器可以处理 PropertyGrid 中的纯文本输入,那么当对象保存到存储或导出到 XML 时,它也会生成纯文本字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2021-10-20
      • 2015-08-29
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多