社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MongoDB

我应该加密MongoDB中的用户名/电子邮件字段吗?

orangeMint • 5 年前 • 669 次点击  

所以我正在加密数据库中的字段,但我认为我不能加密用户的 username email 因为我使用这些字段来查找用户。我可以对它们进行散列,但是由于我不认为我可以对每个用户名/电子邮件使用唯一的salt,所以有些人可以使用rainbow表来查找隐藏的用户名/电子邮件。

我想不用加密就可以了?我想使网站尽可能安全。散列它们有意义吗?我可以通过他们的 _id 而不是 用户名 / 电子邮件 ,但我不会让他们 _身份证 直到我找到用户。

我目前正在做的是:

const user = await new db.userModel({
    email: email,
    username: username,
    stuff: cryptr.encrypt(stuff),
});

////

const user = await db.userModel.findOne({
    email: email
}).exec();

编辑:我想散列是没有意义的,因为我不能取消散列用户名/电子邮件。不知道我在想什么。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51948
 
669 次点击  
文章 [ 2 ]  |  最新文章 5 年前
veprolet
Reply   •   1 楼
veprolet    5 年前

这个问题真的应该在infosec Stackexchange上提出。

加密通常是毫无意义的,因为您需要访问密钥才能使用加密的数据库。这意味着您需要将它保存在数据库旁边。如果你的服务器受到攻击,黑客就会用密钥解密数据库。当然,这比什么都不做要好,因为黑客可能(也许不太可能)只会危害数据库。Horatiu Jeflea hovewer提到了加密数据库的其他重要原因,如果您不是单独在项目中工作,则应该特别考虑这些原因。

只有在不需要显示用户名的情况下,散列用户名才是可能的,但是用户名通常是公共的,所以它对安全性的提高很小。

散列电子邮件是一个有趣的问题。你问他们是有原因的。您可能需要联系您的用户。如果你把它们杂凑起来,你就做不到,如果你不需要这样做,那么你不需要(也不应该)首先保存它们。但是,如果它们只是身份验证过程的一部分,那么这将是可能的解决方案。

彩虹表不能真正打破现代哈希算法,尽管最大的缓解是前面提到的salt,这将使它 很多 对大多数散列攻击来说更难。您还必须确保您使用的不是像md5这样易受攻击的,而是像sha256这样安全的或足够的bcrypt。你应该用其中一个来散列密码。还要注意的是,您可以对所有散列字段使用相同的salt,salt甚至可以是(这会减少一点安全性)一个公共字段(username?)不用盐的理由很少。

总而言之:你不能散列它们,加密可能不值得,除非你能充分地隔离密钥,或者因为外部黑客以外的原因而需要它

Horatiu Jeflea
Reply   •   2 楼
Horatiu Jeflea    5 年前

我想不用加密就可以了?

在大多数情况下,是的。密码应该是散列的(+salt..),敏感数据应该是加密的。但用户名或电子邮件在大多数情况下不应敏感。


但假设它们将在数据库中加密。

你在储存 encrypt(username) 在你的数据库中,所以为了搜索它,而不是使用 username ,使用 加密(用户名) . 当然,排序可能会引起一些麻烦,但找到用户应该是高效的。


想想加密(在你的例子中)不是关于黑客,而是关于那些正在阅读这些记录的人。例如,正在调查生产问题或DBA的开发人员,需要一些(并非所有)字段难以读取。将密钥存储在另一台机器上(最好是在密钥管理工具中)将添加额外的安全层。