保护密码免于反编译

时间:2012-04-29 12:46:02

标签: c# .net passwords password-protection

我有程序通过预定的用户名和安装程序连接到SqlServer。密码。 例如:

static void Main(string[] args)
{
    string UserName, Password;
    UserName = "Name";
    Password = "Pass";

    SqlConnection conn = new SqlConnection("...");
}

如何保护密码免受反编译?

3 个答案:

答案 0 :(得分:15)

首先,不要这样做。安全系统旨在保护用户免受攻击者的攻击,他们试图让用户运行错误的代码。它并非旨在保护您的程序 其用户,而您正在尝试这样做。

由于多种原因,将用户名和密码硬编码到可执行文件中是最糟糕的做法。首先,因为它授予拥有您的程序的人访问数据库的权限,而不是授权的人。其次,这意味着如果您需要更改用户名或密码,则需要重新发送程序。第三,如果密码确实存在,并且只需要一次,会发生什么?您无法限制只访问攻击者。

更好的解决方案是要求每个用户都拥有自己的帐户;让他们输入密码。或者将数据库访问与其他身份和授权方案集成在一起,例如Windows身份验证或其他任何方式。

答案 1 :(得分:3)

如果此程序将始终在同一台计算机上运行,​​您可以将此信息放在配置文件and use DPAPI to encrypt it的connectionStrings部分。

答案 2 :(得分:1)

加密密码是一回事。如果你问我,在数据库上拥有一个专用用户,只需要对数据库对象拥有一组必要的权限,这一点就更为重要了。