将敏感信息放在Web.config文件中是不好的做法?

时间:2011-09-16 02:40:07

标签: .net asp.net asp.net-mvc

为了让管理员能够轻松修改用户在我的ASP .NET MVC Web应用程序中被授权的组,我将组名作为appSettings放在我的Web.config中。

<add key="User" value="VDP ICMD Users"/>
<add key="SuperUser" value="VDP ICMD Super Users"/>
<add key="Administrator" value="VDP ICMD Administrator"/>

与实际Active Directory组名称相关的值。然后在我的控制器中,使用我的自定义AuthorizeAttribute我可以简单地写

[AuthorizeAD(GroupKeys = "User")]

我的问题是,将组名等敏感信息放在Web.config文件中可以轻松更改是不好的做法?除了登录服务器本身之外,有人可以轻松访问Web.config文件吗?

3 个答案:

答案 0 :(得分:4)

如果访问web.config很容易,则取决于您的基础架构和安全策略。它不是一个可浏览的文件,所以如果有人想窃取web.config需要进入你的服务器。 (另一个选择是ASP.NET流程中现有的或未来的安全漏洞,它发生在之前,但我们希望这是不太可能的情况)。

将尽可能不那么敏感的信息存储起来是一种很好的做法,但很难一无所获。

您可以加密配置文件中的敏感信息。 Here你有一个解释如何去做的事情。

答案 1 :(得分:2)

一般来说应该是安全的,只要你没有放入任何有权访问部署文件夹的人在内部窃取的纯文本密码。

它上面的IIS和ASP.NET引擎旨在阻止从Web访问web.config文件,因此这些文件不会通过浏览器或HTTP连接被嗅探或窃取。

这样说,根据经验,我会将这些信息放在数据库的配置表中,并在ASP.NET代码中创建包装类,封装读取这些配置值,以便没有太多的逻辑获取这些数据。

数据库中配置参数的优点至少是简单或零部署,无需手动编辑文件即可轻松更改,自动备份并回答您的主要问题,您的数据库应已受到保护,以防止未经授权的访问。

答案 2 :(得分:0)

没有。这在给定的上下文中是不安全的。

群组名称是与您的网站对AD进行有效身份验证的关键。在您的方案中,如果您组织中的某个人员位于具有更高限制的组中,他可以通过访问web.config文件并简单地添加/编辑组名来提升其自己的写入/编辑权限,例如访问机密信息,从而提升权限。 ,如工资或合同,甚至是公司的CEO计划。你想要这样的麻烦吗?

阅读MSDN文章How to encrypt Web.config