[对于一个冗长而漫不经心的问题,我们深表歉意。我希望能引发比我知识渊博的人的一些讨论/建议。如果这确实不适合 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 是安全的。 这些是好的假设吗?
因此,就我的初学者大脑已将我带入安全路径而言。有什么意见或建议吗?我是否做了任何不正确的假设或忽略了任何明显的事情?