在asp.net应用程序中存储加密密钥

本文关键字:存储 加密 密钥 应用程序 asp net | 更新日期: 2023-09-27 18:01:08

搜索结果显示,许多关于"在哪里/如何存储服务器应用程序的加密密钥"的问题已经被询问和回答。我觉得这些答案并不令人满意。

假设您正在托管一个asp.net web应用程序,该应用程序在某个地方管理一些密钥以保护数据库中的敏感数据。如果我是一个以某种方式访问web服务器的攻击者,我只会下载并反编译.net应用程序的程序集。然后,一旦我弄清楚应用程序对访问敏感数据的api调用,我就会返回服务器,并向应用程序添加一个aspx页面。aspx页面将使用相同的一组api来查询数据库(即XyzRepository.GetAll((类型的调用(。然后,我的aspx页面会将解密后的行转储到磁盘上。我的aspx页面甚至不在乎解密在哪里以及如何进行。无论web应用程序是否使用DPAPI来保护其密钥,无论是否使用受保护的配置,我都可以访问数据。因为我的aspx页面将在web应用程序的上下文中运行(即,它受益于相同的应用程序池标识、相同的机器密钥、相同的一切(。

当我想到这一点时,我倾向于相信,一旦有人侵入你的服务器,无论你在哪里以及如何存储密钥,他们都会获取你的数据。从这个意义上说,我发现以前关于这个主题的问题的公认答案是妄想症。我是不是错过了什么?

而且,我想知道是否有一种方法可以配置IIS服务器,使应用程序池在向应用程序添加新代码后立即被清除,并且永远不会重新启动(即,对整个web应用程序、所有独立的aspx页面和dll进行代码签名检查(?

在asp.net应用程序中存储加密密钥

"安全性"只能针对特定威胁进行定义。

大多数基于加密的安全措施都是为了防止有人窃听你的通信。

如果我是一个以某种方式访问网络服务器的攻击者。。。

这是一个更加严重的威胁。一种常见的保护措施是双重防火墙:

您的Web服务器(IIS#1(为公众服务,但无法访问数据库。它必须调用第二个防火墙后面的应用程序服务器(IIS#2(。

aspx页面将使用相同的一组api来查询数据库(即XyzRepository.GetAll((类型的调用(

当API有这样的调用时,数据不被认为是秘密的。