我们应该加密存储在aspnet_Profile表中的数据吗?

时间:2017-02-14 13:22:21

标签: database security encryption

我们正在对所有网站进行安全更新,其中涉及的两个步骤是在传输时加密数据并在静态加密数据。

添加SSL证书将在传输时加密数据,我们需要加密数据库中的所有数据,这些数据被归类为用户的个人详细信息。

其中一些细节存储在aspnet_profile表中。

有人可以建议加密存储在此表中的数据吗? 我们是否真的需要加密数据以作为安全更新的一部分?

1 个答案:

答案 0 :(得分:0)

这取决于。您是希望能够访问用户的信息,还是用户是唯一可以访问数据的人?

在第一种情况下,我认为只有当数据库存储在与Web服务器不同的服务器中,或者解密密钥存储在单独的服务器中时,数据加密才有意义。为了解密数据并将其呈现给用户,您需要对其进行解密。如果加密数据和密钥位于同一服务器中,并且该服务器受到攻击,则攻击者将能够解密所有内容,因为他们也可以访问密钥。如果单独存储它们,它们将需要危害2(或更多)服务器,这可能会更难。此外,由于加密是一项繁重的任务,您应该只加密敏感数据(无论您认为哪种情况对您的方案敏感)。像密码这样的数据不应该加密,而是加密和盐渍(网上有很多关于如何做到这一点的信息)。如果您决定对所有内容进行加密,那么每个用户也应该拥有不同的密钥,这样,如果一个密钥被泄露,只会有一个用户受到影响。

如果您只希望用户查看存储的信息,您应该知道无法访问它(除非您将其存储在单独的数据库中,不加密或使用您自己的密钥加密)。如果您没有使用自己的密钥备份信息(或以纯文本形式存储 - 这违反了目的),那么丢失密码的用户将遇到麻烦。即使您有数据副本,但恢复数据意味着使用您的密钥对其进行解密(如果没有以明文形式存储),并使用用户设置的新密钥再次对其进行加密。如果数据量很大,这可能是一项繁重的任务。最后,如果您只希望用户具有访问权限并且完全负责(因此您将无法访问完全),您应该明确说明,并且最好在客户端执行加密。同样,只有敏感数据才能更好地加密。此外,不应加密用户名和用户登录密码等信息。盐渍散列的相同原则也适用于此时的密码。

在这两种情况下,您都应该记住,丢失密钥意味着可能会丢失所有数据!您还应该使用一些好的加密方案,例如AES CFB模式。

总的来说,这是否是一个好主意实际上取决于数据的敏感性和您的预算。需要定期备份,并小心处理,以免丢失密钥。还可能需要额外的服务器,如果网站获得的流量很大,可能需要功能强大的服务器才能处理这项繁重的任务。