然而,我们的一个客户认为这种策略不安全。该客户说我们应该只通过单独的Web服务层连接到SQL Server。
我真的不想重写这个应用程序来满足这个客户。我该怎么告诉他?有没有人知道我如何最好地反驳这个观点?
先谢谢了...
安全性总是需要做出权衡。客户真正担心的是什么?
是否担心数据库凭据“明文”存储?我曾见过审计员指出这是一个潜在的漏洞,但实际上,如果有人入侵了你的Web服务器,他们可以对数据库运行任意代码,因此加密数据库凭据并没有太大的作用。
您的Web应用程序应该使用最少权限用户连接到数据库,因此入侵Web服务器只应给您读取和更新数据的权限。如果所有操作都经过Web服务层,情况会如何改变?再次强调,这样做的成本非常实际 - 在复杂性和性能方面成本较高。 只有客户才能回答这个成本是否值得的问题。
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
你需要的是连接字符串
"Integrated Security=SSPI;Initial Catalog=TestDb;Data Source=10.10.10.10"
客户端的想法是错误的,引入另一层并不能自动提高安全性。
简而言之,对于数据访问,请使用SQL Server角色。例如,内置的data_reader和data_writer角色是一个很好的起点。始终为应用程序使用最合适的最低权限帐户。如果您只需要读取数据,请使用仅具有读取权限的帐户。
尽可能使用Windows身份验证,如果不可能,则至少加密连接字符串。
有关如何执行我所描述的操作的更多信息,请访问http://msdn.microsoft.com/en-us/library/ff650037.aspx#pagpractices0001_dataaccess。
一种可能性是对 web.config 中的部分进行加密。这样,只有能直接访问 Web 服务器的用户才能解密此部分。
以下是使用 iisreg 工具实现此功能的方法: http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx
http://en.wikipedia.org/wiki/Tunneling_protocol
http://en.wikipedia.org/wiki/HTTP_tunnel
顺便说一句,我连接服务器只通过隧道进行任何操作。
我从来不喜欢使用web config。注册表更安全。
最佳实践是:
为了增强安全性
来源:
来自ScottGu @ http://msdn.microsoft.com/en-us/library/Aa302406
可扩展性:
关于可扩展性:通过自定义管理软件,可以非常容易地在Web Farm上创建/编辑注册表键。http://weblogs.asp.net/scottgu/archive/2010/09/08/introducing-the-microsoft-web-farm-framework.aspx
最后,对于所有投票反对我的人,我想说的是:开箱即用的安全性是不够的。安全是一门艺术而非科学。