我想知道以下关于以下两个问题保持与以下字段相关的配置信息的一般惯例:
A>安全问题
B>更新问题(如果配置应由用户而不是开发人员更新)。
1)我在web.config中定义数据库连接字符串信息(数据库,用户和密码)。还有另一种方法,即保存在cs文件中?我认为不可能将它保存在应用程序使用的同一个数据库中。
2)我的应用程序发送电子邮件,我在* .cs类电子邮件中定义凭据。这是真的吗?考虑到此信息已更改且没有开发人员支持,最好将它们保存在数据库中并允许用户通过应用程序更新它们吗?
3)所有方案(config,update和* .cs文件)的方法是什么?例如,在将电子邮件凭据保留在数据库中时,我应该在使用之前从数据库获取这些信息吗?或者是否有另一种方法,即将其写入临时文件,然后重复使用,直到在数据库中更改为止等。)
任何帮助将不胜感激。
答案 0 :(得分:1)
在源代码中保留连接字符串和凭据等信息通常是一种不好的做法。它并不比将它存储在Web.config(未加密)中更安全,因为所有 资源可以简单地从代码中提取。 对于Web应用程序,最佳做法是将所有敏感信息存储在一个位置(如web.config),但在部署期间对其进行加密。
要加密web.config
,您可以使用可在此处找到的aspnet_regiis
工具
%windows%\Microsoft.NET\Framework\versionNumber
例如
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe
使用密钥-pef
或-pe
。您只能加密<connectionString>
等特定部分,并保留其他未加密的部分。
有关详细信息,请参阅Encrypting and Decrypting Configuration Sections amd How to: Encrypt a web.config File
答案 1 :(得分:1)
加密敏感的应用程序配置数据通常是个好主意。您可以使用几种方法,具体取决于您的应用程序类型。
对于Web应用程序,您可以使用DPAPI和aspnet_regiis来加密配置。有关示例代码,请参阅Encrypt and deploy app.config。
或者(如果您有桌面应用程序或者不想要aspnet_regiis),您可以查看受保护的配置部分,如下所述:https://msdn.microsoft.com/en-us/library/hh8x3tas.aspx
回答您的具体问题:
1)将其保存在web.config中并加密。从安全角度来看,.cs文件中的硬编码是有缺陷的(代码可以被反编译),当代码从环境移动到环境时,它将很难改变(dev - &gt; uat - &gt; prod)
2)同样,不要将凭据存储在.cs文件中。您可以为用户提供操作配置的UI,但请记住,他们可能会破坏配置,您需要一种机制来恢复已知的良好配置
3)如果您担心从db读取的频率(尽管读取只要没有写入就很便宜),您可以在启动时将所有配置读取到类中。这样就没有要管理的临时文件,并且数据库上的读取量有限。