Asp.net mvc ASP.NET web应用程序开发:向承包商/免费用户隐藏敏感信息
我正在开发一个使用AmazonWeb服务的web应用程序。我正在使用ASP.NETMVC。我还使用了几个Amazon Web服务,包括S3、EC2和SQS。我计划雇用自由职业者来帮助发展。现在,我将Amazon Web服务密钥和密码放在Web.config文件中,并将其连接到我的信用卡。我使用托管的SVN源代码管理和TeamCity进行自动构建和测试Asp.net mvc ASP.NET web应用程序开发:向承包商/免费用户隐藏敏感信息,asp.net-mvc,security,Asp.net Mvc,Security,我正在开发一个使用AmazonWeb服务的web应用程序。我正在使用ASP.NETMVC。我还使用了几个Amazon Web服务,包括S3、EC2和SQS。我计划雇用自由职业者来帮助发展。现在,我将Amazon Web服务密钥和密码放在Web.config文件中,并将其连接到我的信用卡。我使用托管的SVN源代码管理和TeamCity进行自动构建和测试 问题是,自由职业者有没有办法在不知道AWS密钥和机密等敏感信息的情况下签出代码并进行测试?我应该把它放在另一个文件里吗?我应该把它放进数据库并加密
问题是,自由职业者有没有办法在不知道AWS密钥和机密等敏感信息的情况下签出代码并进行测试?我应该把它放在另一个文件里吗?我应该把它放进数据库并加密吗?自由职业者的问题是他们通常可以访问王国的密钥。在.net中,你可以将所有你想保密的东西扔进一个单独的程序集中……但这是可以颠倒和打开的。您可以以加密格式保存数据,但在某个时间点,您必须向他们提供解密算法的访问权限,以便他们在与这些服务通话时能够处理解密的数据。如果你有一家与开发人员合作的商店,你可以创建一个包装器,在自由职业者代码和服务层之间进行交互,从而在一定程度上保护你的代码和敏感数据免受不受信任的自由职业者的攻击 要做到这一点,最简单的方法是使用传统的抽象层。不要让你的自由职业者深入了解你的代码库,你应该做得很好。在您的声明中,您说您正在使用公共SVN,这意味着您可能需要多个存储库
不要被简单地解决这个问题所迷惑——你不可能不花更大的篇幅就向开发人员隐藏你的密钥。如果它存储在DLL中,他们可以使用Reflector之类的工具对DLL进行反编译。如果它在web.config中加密,但在需要使用它的其他地方解密,他们可以使用代理工具监控网络流量,或者附加调试器。虽然建议的方法对于防止密钥被随意窃取(例如被典型用户盗用)很有用,但一些技术娴熟的人如果决心找到它并有权运行您的代码,通常可以找到一种方法来获得他们想要的 试着雇佣你可以信任的人。如果必须的话,做背景调查
如果确实需要隐藏密钥,请将使用密钥的代码保存在单独的系统上,开发人员只有通过设计良好的安全接口才能访问该系统。基本上,您将通过另一个web服务代理访问AWS。法律保护是您的朋友。请律师为你起草一份合同,包括保护条款和违规处罚。此外,如果你需要足够的自由职业者的帮助,看看一家提供服务的公司可能会比自由职业者的角度更安全一些 如果做不到这一点,Rony的第一点很好——获得第二个非生产账户。老实说,您无论如何都应该有一个用于暂存和测试的代码,因为您可能不希望未经测试的代码与生产数据一起使用。AWS的真正成本是带宽,而不仅仅是存储,因此成本不应该太高
另一个角度,取决于您使用的服务API的多少以及您作为编码人员的技能,是在您自己的存储接口后面抽象S3位。为开发人员提供非S3支持的实现,同时将S3支持的实现保存在他们无权访问的单独存储库中,然后在适当时切换到S3支持的选项。这有着长期的优势,比如在需要时可以很容易地更换存储提供商。我认为这两个问题都回答了我的问题,但我只能将其中一个作为答案。