将ASP.NET连接到SQL Server的最佳实践

时间:2012-04-26 18:27:43

标签: c# asp.net .net sql-server security

我们有一个ASP.NET 4.0 Web应用程序,它通过LAN连接到单独计算机上的SQL Server。我使用存储在我的Web.config中的ConnectionString(带有SQL Server身份验证)来执行此操作。基本上,它是一种相当传统的Web-Server-to-SQL策略。

但是,我们的一位客户认为这种策略并不安全。该客户端表示我们应该只通过单独的Web服务层连接到SQL Server。

我真的不想重写这个应用程序只是为了满足这个客户端。我应该告诉他什么?有没有人知道我怎么能最好地反驳这个?

提前致谢...

8 个答案:

答案 0 :(得分:11)

安全始终是一种权衡。客户真的害怕什么?

拥有“明确”的数据库凭证?我已经看到审计人员指出这是一个潜在的漏洞,但实际上,如果某人已经破坏了您的Web服务器,他们可以针对数据库运行任意代码,因此加密数据库凭据并不会给您带来太大的影响。

您的网络应用应该使用最小权限用户连接到数据库,因此,损害网络服务器应该只授予您阅读和使用权限。更新数据。如果一切都通过Web服务层,那将如何改变?同样,通过访问Web服务层,存在非常实际的成本 - 复杂性和性能。只有客户才能回答这笔费用是否值得。

答案 1 :(得分:3)

如果这是一个Web项目,则需要将运行用户的IIS服务器更改为域用户,并将sql server的权限授予该用户。 您可以在连接字符串上使用SSPI,如下所示。 像这样,您不需要在web.config上清楚地保留您的用户名或密码。

<configuration>
  <system.web>
    <identity impersonate="true"/> 

  </system.web>

和你的connectionString

"Integrated Security=SSPI;Initial Catalog=TestDb;Data Source=10.10.10.10"

答案 2 :(得分:3)

有许多客户争论IT专业人员的工作,就像有很多人去看医生要求用药而不是他们有什么疾病,因为他们已经知道了答案,因为他们在互联网上阅读了。

我的意思是,他们要求您构建应用程序,而您作为IT专业人员应该在应用程序按预期工作时最好地了解。你作为一个专业人士应该有球告诉你的客户,如果他认为可以更好地到达其他地方,他应该去那里或者自己建立应用程序;这是过去做的积极结果:)

关于安全;也许是因为他们有信心你可以加密web.config并展示它们,但实际上它没有任何意义;如果有人可以访问服务器,他们可以解码它。另一方面,想要侵入您的数据库的人应该通过很多障碍。很难打破,也许是不可能的。另一个选择是简单地阻止来自外部网络的连接,网络或ip范围或其他任何东西我认为这不应该让人担心。

还有更多现实问题需要担心,例如阻止跨站点脚本和这些常见问题。

答案 3 :(得分:1)

客户端错误引入另一层不会自动提高安全性。

简而言之,使用SQL服务器角色进行数据访问,例如内置的data_reader和data_writer角色是一个很好的起点。始终为应用程序使用最合适的最小权限帐户。如果您只需要阅读数据,请使用只能阅读的帐户。

尽可能使用Windows身份验证,如果不可行,则至少加密连接字符串。

有关如何执行我所述内容的更多信息,请访问http://msdn.microsoft.com/en-us/library/ff650037.aspx#pagpractices0001_dataaccess

答案 4 :(得分:1)

一种可能性是加密web.config中的部分。因此,只有能够直接访问网络服务器的用户才能解密此部分。

以下是iisreg工具的帮助: http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

答案 5 :(得分:0)

您可以在数据库中启用加密连接,并告诉客户端连接是否加密,以便完全安全?

答案 6 :(得分:-1)

为了使其更安全,并让您的客户满意,您可以在计算机之间使用Tunneling

您设置了数据库所在的服务器隧道程序,以及客户端计算机上的客户端隧道程序。您可以通过隧道连接将一台计算机连接到另一台计算机,并通过隧道连接进行数据库连接。

一切都是交换高安全性(如果隧道支持它,则压缩)。

http://en.wikipedia.org/wiki/Tunneling_protocol

http://en.wikipedia.org/wiki/HTTP_tunnel

Ps我只通过隧道连接到我的服务器,无论我做什么。

答案 7 :(得分:-2)

我从不喜欢使用网络配置。注册表更安全。

最佳做法是:

  • 隐藏注册表中连接字符串的重要项目
  • 加密连接中的重要项目,如用户名,密码和服务器名称 注册表
  • 通过课程
  • 访问注册表
  • 动态构建连接字符串,仅在每页需要时
  • 错误处理每个页面,以便在出现错误时不显示连接字符串
  • 完成后始终关闭连接。避免内存泄漏
  • 始终关闭并重置DataReaders

了解其他安全性

  • 您可以构建一个单独的程序来创建连接字符串和 将该项目作为解决方案中的库引用
  • 如果您想要真正安全,您的客户是正确的。将信息发送到将与DB通信的dll。这是很多工作

<强>来源:

来自ScottGu @ http://msdn.microsoft.com/en-us/library/Aa302406

<强>可扩展性:

关于可伸缩性:使用自定义管理软件,可以非常轻松地在Web场中创建\编辑注册表项。

http://weblogs.asp.net/scottgu/archive/2010/09/08/introducing-the-microsoft-web-farm-framework.aspx

对所有投票给我的人发表最后的说明。开箱即用的安全性还不够。安全是艺术,而不是科学。

黑客知道默认存储密码的位置......

ASP.NET 4.0粉丝

Microsoft使asp.net 4.0网站可以轻松部署注册表设置:

http://msdn.microsoft.com/en-us/library/dd394698.aspx