【问题标题】:Secure ASP.net application with Azure SQL Databases on Azure使用 Azure 上的 Azure SQL 数据库保护 ASP.net 应用程序
【发布时间】:2013-03-11 14:31:13
【问题描述】:

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

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

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

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

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

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

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

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

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

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

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

所以,这就是我的初学者大脑已将我带入安全路径的情况。任何cmets或建议?我有没有做出任何不正确的假设或忽略了任何明显的事情?

【问题讨论】:

  • 鉴于您的应用程序是医疗保健应用程序,当您可以在 Azure 上托管应用程序时,请查看 Azure 信任中心了解合规性详细信息。我在云系统集成公司工作,以上是我们在研究应用程序/技术之前询问的前 5 名之一。

标签: asp.net security azure azure-sql-database


【解决方案1】:

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

存储数据:我建议将加密的 pdf 文件移至 blob 存储。然后,您可以提供加密 pdf 的 链接,而不是附加加密文件本身。另外,您可以将 blob(存储 pdf)设为 private,这样任何人都无法访问它。然后,创建一个共享访问签名,本质上是一个具有时间限制权限的特殊签名 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 Trust Center

【讨论】:

    【解决方案2】:

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

    回到技术。

    Azure 云服务:您说您将使用基于 SSL、https 的站点。这是第一次设置的安全性,也是有效的。除此之外,请确保您follow the best practices.

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多