1

[对于一个冗长而漫不经心的问题,我们深表歉意。我希望能引发比我知识渊博的人的一些讨论/建议。如果这确实不适合 SO,请给我提示在哪里提出此类问题。]

我有一个 ASP.NET MVC 4 应用程序。我正在使用 Azure Web 角色来托管它(至少现在是这样)。我的应用程序是一个专门的医学访谈,它从用户那里收集敏感信息并生成一份报告,医生和患者可以查看和交付(通过附加到未加密电子邮件的加密 PDF 文件)医生和患者。敏感数据将保留 24 小时,以便医生回来检索报告,然后删除记录(我知道这实际上并没有从持久存储中删除数据)。

所以我开始考虑在安全边界方面我需要担心什么,以保持机密数据的机密性。尽管我是一位经验丰富的桌面应用程序开发人员,但我对整个 Web 编程都是新手。

我需要担心的第一个明显的安全边界是服务器和用户之间的通信层。我有一个有效的、正确配置的 SSL 证书,并且网站中处理登录用户的所有部分(包括采访和报告工作流程)都通过 HTTPS 端点运行。

我假设/希望 Azure 的 SSL 实现是正确的,并且我不能或应该做任何事情来强化主机本身。

为方便用户,我确实允许访问者浏览http://mywebsite.com,并且当他们登录时,我会重定向到标有 [RequiresHttps] 的页面。我知道这种 HTTP 到 HTTPS 的重定向很容易受到攻击到SSLStrip 中间人攻击,其中服务器看到安全的 HTTPS 连接,但警惕的用户会注意到 URL 是 HTTP 而不是 HTTPS。我计划保留这个便利功能,但我将通过使用扩展验证证书来缓解它,这为大多数用户提供了一个快乐的绿色地址栏。我会在主登录用户页面上放置一些东西,提醒用户验证绿色地址栏。

我将弄清楚如何配置 ASP.NET,以便我的所有 cookie 都被加密。

我已经启用了远程桌面(在 Azure 部署向导中),这样就会打开一个门户,如果有人能找出我的用户名和密码,就会受到攻击。这就是生活。

我需要担心的下一个安全边界——这也是我需要帮助的地方——是在未经授权的人访问数据库的情况下保护敏感数据。我的数据库管理知识几乎仅限于复制和粘贴连接字符串以及编写简单的 SQL 查询。

我正在为我的所有数据库内容使用实体框架和 Azure SQL 数据库。我使用嵌入到我的代码中的密钥加密数据实体中的敏感数据。据推测,数据库本身是加密的,刚刚获得数据库文件的人(Azure SQL 数据库界面可通过 Web 连接访问,但只能从受信任的 IP 地址访问)需要弄清楚我的 SQL 用户名和密码才能提取数据出来。

有人可能会欺骗我的应用程序泄露敏感信息。我的工作流程只允许登录用户读取和写入他自己的记录。为了让攻击者访问加密的敏感数据,他们要么需要获取我的加密密钥,要么想办法调用我的代码。我没有混淆 .NET 代码;我假设我的可执行文件是安全的。我还假设包含我的数据库凭据的明文 web.config 是安全的。 这些是好的假设吗?

因此,就我的初学者大脑已将我带入安全路径而言。有什么意见或建议吗?我是否做了任何不正确的假设或忽略了任何明显的事情?

4

2 回答 2

1

其中很多与 Azure 无关。让我从 Windows Azure 的角度谈几点。

存储数据:我建议将加密的 pdf 文件移动到 blob 存储中。然后,您可以提供加密 pdf 的链接,而不是附加加密文件本身。另外,您可以将 blob(存储 pdf)设为私有,这样任何人都无法访问它。然后,创建一个共享访问签名,本质上是一个具有时间限制权限的特殊签名 URL。然后,您可以设置一个 24 小时阅读窗口。通过电子邮件提供此链接,在接下来的 24 小时内,它可以被下载并(使用正确的密码)解密。24 小时后,链接停止工作。您也可以在此时删除 blob(是的,它会消失)。

使用 RDP,您需要选择一个非常好的密码。除了 RDP,我看不到有人如何访问您的 Web 角色实例。

对于 Windows Azure SQL 数据库,我建议不要让外部世界访问它。只需限制对 Windows Azure 服务的访问。Windows Azure SQL 数据库不加密数据,也不支持加密字段。您需要自己进行加密。

您需要回答的更大的问题:您可以将医疗信息存储在云中吗?您这样做是否违反了任何类型的合规或法律规定?您需要对此做功课并弄清楚。清晰的数据会引起人们的关注,合规性(我不是律师,所以我不会在这里给出任何建议)。使用 Windows Azure,您可以获得签名的 BAA,这意味着如果您使用的是 Windows Azure 计算和存储,您的应用程序可以实现 HIPAA 合规性。目前 Windows Azure SQL 数据库不属于 HIPAA 合规性窗口。有关合规性的详细信息,请参阅 Windows Azure信任中心。

于 2013-03-10T19:30:47.810 回答
0

安全性中重要的是智能配置和信任。这是两个不同的东西,任何架构都需要它们。

回到技术。

Azure 云服务:您说您将使用基于 SSL、https 的站点。这是第一次设置的安全性,也是有效的。除此之外,请确保您遵循最佳实践。

Azure SQL 数据库:您可以使用防火墙规则保护/保护 Azure SQL 数据库。当您要将数据库连接到 Azure 云服务时,您可以只允许单独使用 Microsoft Azure 服务,即只能从云访问。所以整个数据库对外部世界是完全密封的。在设置或维护期间,您可以启用本地 IP 以使用数据库,然后您可以再次删除该访问权限并恢复到仅云模式。默认情况下,Azure 没有加密工具。还有一个很好的强密码。

远程桌面:在较短的时间内使用安全证书。不要通过 RD 对您的应用程序进行任何更改,请进行干净的重新部署。如果通过 RD 对您的应用程序进行任何修改,所有更改都将在任何数据中心活动期间被丢弃,因为结构控制器可能会将实例拉下并在不同的位置重新启动。

Azure 实施了许多认证和合规性。这确实是世界级的云产品。

于 2013-03-10T19:33:39.680 回答