0

我有一个ASP.NET Core 2.0 WebAPI应用程序,它在appSettings.json中有Db ConnectionString。 虽然在发展它有这个值:ASP.NET核心appSettings.json安全

“DefaultConnection”: “服务器=本地主机;数据库= Tyroll; Trusted_Connection = TRUE; MultipleActiveResultSets =真正的”

,只有当我们把它发布到生产我们通过使用VS 2017发布配置文件来更改此适当的密码。

因此,SQL服务器密码不存储在存储库上,并且没有问题。

文件appsettings.json是protected by IIS
我想应该是这个密码被莫名其妙地“隐藏”甚至在IIS的问题?
其中一个原因是增加了安全性,以便在此处违规时SQL凭据不是纯文本格式。 另一种适用于IIS管理员不应直接访问SQL Server的授权方案。

我想它可以被加密,应用程序本身将有解密它的密钥。这不是100%安全的,因为在IIS上违反的情况下,甚至可以从应用程序反向设计这个密钥,但是当它以纯文本的形式存在时,它会变得更加困难。

所以第一个问题是我应该这样做呢?

第二,如果1.Q是,那么最好/推荐的方法是什么?

在.NetCore2或VS2017或IIS或其他工具中是否有内置的工具?

下面是一些相关链接:

回答

0

我会建议你用户的Active Directory集成的安全访问数据库,App Pool可以在用户帐户下运行,并且该特定用户帐户只具有对数据库的必需访问权限。这样可以在发生攻击时保护用户凭据,因为密码从不公开。

+0

这不是我的选择,因为SQL Server不在同一个域中,它在[DMZ](https://security.stackexchange.com/questions/3667/what-is-the-real-网络上的功能和使用) – borisdj

+0

你的意思是说,SQL服务器在DMZ ..它必须是一个公共数据库托管服务器..不应该在DMZ –

+0

是SQL服务器位于DMZ中,因此IIS位于另一个域中。 它不是公共托管,它是私人的,只有我们国际空间站的用户凭证(用户名和密码)才能访问它。 – borisdj

1

解决方案,我实现在正在密码的自定义加密的ConnectionString
但由于应用程序需要解密它,它更多的是一个混淆。
对于加密我已经使用AES(使用System.Security.Cryptography)和密钥存储:一半在connectionString本身和另一半在应用程序硬编码。
此外正则表达式被用来从ConnectionString提取密码,然后被解密后的字符串替换。