代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

我应该将敏感数据传递给进程吗?启动.NET调用?

  •  4
  • John M Gant aman_novice  · 技术社区  · 15 年前

    我正在开发一个.NET Windows应用程序,该应用程序将使用Process。请启动在同一台PC上运行的另一个内部开发的.NET应用程序。我需要向目标应用程序传递数据库连接信息,包括用户ID和密码。我正在试图确定在发送信息之前是否需要对其进行加密。

    假设最终用户的PC没有被破坏,如果我在参数中不加密地传递连接信息,连接信息会在任何地方公开吗?

    这样可以吗?

    string myExecutable = "myApp.exe";
    string server = "myServer";
    string database = "top_secret_data";
    string userID = "myUser";
    string password = "ABC123";
    string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password);
    ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo);
    Process.Start(startInfo);
    

    或者我应该用这样的东西…

    var crypto = new MySymmetricCryptoLib.Crypto();
    string myExecutable = "myApp.exe";
    string server = crypto.Encrypt("myServer");
    string database = crypto.Encrypt("top_secret_data");
    string userID = crypto.Encrypt("myUser");
    string password = crypto.Encrypt("ABC123");
    string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password);
    ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo);
    Process.Start(startInfo);
    
    5 回复  |  直到 15 年前
        1
  •  4
  •   John Feminella    15 年前

    检索调用进程时使用的参数非常简单,因此它们将在本地暴露给具有技术头脑的用户。如果这对你来说不是问题,那么我不会担心,因为你说你没有通过网络传输,你的问题要求我们假设机器没有受到影响。

        2
  •  2
  •   JaredPar    15 年前

    你的问题不清楚你想保护谁的数据。这让人困惑,因为你说“假设电脑没有受到损害”。

    如果您正在机器上启动本地进程,并且机器没有受到影响,那么需要保护什么?在这种情况下,任何东西都不会穿过网络,因此没有人可以监视这些论点。

    但是,如果您担心任何可能对计算机具有管理访问权限的人或可能看到数据的用户,则必须对其进行加密。很容易看到进程的命令行参数。任何半能干的用户都能找到它们。

        3
  •  1
  •   JoshBerke    15 年前

    我会加密整个字符串,而不是单独的部分,你基本上告诉了一个调皮的用户,嘿,这是连接信息,继续,然后断开它。另一个选项是在另一个应用程序启动后传递参数。

    当您的构建安全措施确定攻击是什么(访问数据库的连接信息)以及谁将发布攻击时,这一点非常重要。您是否试图阻止本地用户获取此信息?你是想阻止普通用户还是专家用户?

    例如,一个专家可以继续执行并转储进程的内存,然后发现他未加密的字符串。

        4
  •  1
  •   Ana Betts    15 年前

    使用一个命名管道并在其上适当地设置ACL,然后让子进程继承句柄-不要担心加密。

        5
  •  0
  •   RichardOD    15 年前

    既然你需要修改接收程序来解密,为什么不修改接收程序来读取配置文件呢? encrypt the config file . 如果需要将不同的值传递给另一个应用程序,为什么不传递connectionString键?