C# 如何保护web.config连接字符串不受其他开发人员的攻击?

C# 如何保护web.config连接字符串不受其他开发人员的攻击?,c#,asp.net,web-config,C#,Asp.net,Web Config,我需要保护我的Web.config文件,防止恶意用户访问我们的Web服务器和团队中的初级开发人员。我已使用rsaptectedconfigurationprovider成功加密和解密我们的文件。然而,解密连接字符串就像使用我的应用程序访问它一样简单,不管它是否加密 protected void btnShowConnectionString_Click(object sender, EventArgs e) { lblMessage.Text = WebConfigurationMana

我需要保护我的
Web.config
文件,防止恶意用户访问我们的Web服务器和团队中的初级开发人员。我已使用
rsaptectedconfigurationprovider
成功加密和解密我们的文件。然而,解密连接字符串就像使用我的应用程序访问它一样简单,不管它是否加密

protected void btnShowConnectionString_Click(object sender, EventArgs e)
{
    lblMessage.Text = WebConfigurationManager.ConnectionStrings["MyTestConnection"].ConnectionString;
}

如何确保连接字符串的安全以避免出现类似的问题?

使用标准解决方案无法做到这一点

要做这样的保护,您应该使用这个连接字符串围绕标准库编写自己的包装器,它将从webconfig解密连接字符串。 并且您应该保护您的包装器不被类似Sentinel Hasp的东西反编译。若你们不保护你们的包装,那个么获取加密算法和解密连接字符串就很简单了


但不向开发人员webconfig写入生产连接字符串会更简单。在部署到生产环境时,使用developer Environment来开发和编写生产环境连接字符串。

标准解决方案无法做到这一点

要做这样的保护,您应该使用这个连接字符串围绕标准库编写自己的包装器,它将从webconfig解密连接字符串。 并且您应该保护您的包装器不被类似Sentinel Hasp的东西反编译。若你们不保护你们的包装,那个么获取加密算法和解密连接字符串就很简单了


但不向开发人员webconfig写入生产连接字符串会更简单。部署到生产环境时,请使用developer Environment开发和编写生产环境连接字符串。

您可以阅读此链接,了解msdn推荐的有关
安全字符串连接的解决方案


链接:

您可以阅读有关msdn推荐解决方案的
安全字符串连接的链接

链接:

IMHO,你提到的“变通办法”并不是一个真正的变通办法,而是它本身

您的应用程序(web或其他)必须能够删除信息,以便我能够实际建立连接。除非您对SQL server使用Windows身份验证,否则用户/pwd总是“在那里”…我一直困扰的问题是,为什么/如何在您的应用程序中存在这样的代码(首先)

正如前面的回答中所提到的,将开发环境与生产环境分开——也许在生产环境中只有生产配置。

IMHO,您提到的“解决方案”不是真正的解决方案,而是实际的解决方案

您的应用程序(web或其他)必须能够删除信息,以便我能够实际建立连接。除非您对SQL server使用Windows身份验证,否则用户/pwd总是“在那里”…我一直困扰的问题是,为什么/如何在您的应用程序中存在这样的代码(首先)


如上所述,请将您的开发环境与生产环境分开—可能只有生产环境中的生产配置。

要使用Windows身份验证转到sql,您应该从对sql具有权限的特殊用户启动IIS应用程序池。这不是好的做法。或者,当iis使用用户凭据转到db时,您应该模拟iis。这是系统管理员的恐惧(双重希望模拟等)@KirillBestemyanov不确定您的环境,但这并不总是正确的(域服务器,相同的服务器)。无论哪种方式,“用户”的概念都存在,需要通过身份验证才能访问。使用sqlauth,用户/pwd数据总是处于“清除”状态(如上面的代码所示,这种或那种方式)。您可以将SSL添加到SQL连接,但仍不会在应用程序级别“隐藏”内容。若要使用Windows身份验证转到SQL,您应该从对SQL具有权限的特殊用户启动IIS的应用程序池。这不是好的做法。或者,当iis使用用户凭据转到db时,您应该模拟iis。这是系统管理员的恐惧(双重希望模拟等)@KirillBestemyanov不确定您的环境,但这并不总是正确的(域服务器,相同的服务器)。无论哪种方式,“用户”的概念都存在,需要通过身份验证才能访问。使用sqlauth,用户/pwd数据总是处于“清除”状态(如上面的代码所示,这种或那种方式)。您可以将SSL添加到SQL连接中,但仍然不会在应用程序级别“隐藏”内容。