【发布时间】:2017-11-26 21:34:38
【问题描述】:
我正在寻找将敏感数据存储在数据库中的最佳解决方案。 我知道这是一个普遍的问题,我已经完成了我的功课(至少我是这么认为的),但是我想在这里问一下,然后再做决定。
假设:
- 加密数据需要解密。我们正在讨论 SMTP 凭据,例如用户名、密码、主机、端口 itp。
我在考虑两个概念:
借助 passlib.totp 库加密数据。为了使这些数据更安全,我会将密钥保存在单独的文件中。然后据我所知,我可以使用这个库使用我的密钥将数据解密为纯文本。
-
另一个概念是在查询请求期间借助 postgres 加密和解密数据:
insert into demo(pw) values ( encrypt( 'data', 'key', 'aes') );还有:
decrypt(pw, 'key', 'aes'), 'utf-8')这里的密钥也将存储在单独的文件中。
所以我的问题是:
- 在代码中还是在数据库中加密/解密数据的更好方法是什么?
- 有没有比 passlib.totp 更好(更强大)的库可供使用 -> 我没有使用该库的经验(我知道加密/解密不是存储密码的最安全方式 -> 密码应该是hased,但我需要它以纯文本形式使用用户 smtp 门)。
【问题讨论】:
-
问自己一个问题:这将保护您免受什么样的威胁?因为显然,如果有人获得了您系统的访问权限,则密钥以及数据库内容都可能受到损害......
-
是的,我知道这一点。但是,如果有人只能通过 sql 注入访问数据库内容(由于对输入字段的保护较弱),那么我认为这将为这些数据提供一些保护。我完全意识到这不是 100% 可靠的子弹教授概念。再说一次,例如,您有员工要授予他们读取数据库(或其中一部分)的访问权限,但您不想让他们以纯文本形式查看密码,他们无权访问文件结构.所以我认为在某些情况下这很有用。
-
始终加密和解密客户端。人们可以读取您的网络流量,否则为纯文本。这并不完全与编程相关,所以请移到这里security.stackexchange.com
-
@cricket_007 - 假设作者想使用这些凭据来执行一些后台任务,您的建议不能在这里应用。
-
嗯,除其他外,这确实有助于备份在系统外部时不会不安全。此外,一些国家/地区制定了有关数据泄露/丢失的义务的立法,并区分加密和未加密。对于security.stackexchange.com,也许这是一个更好的问题
标签: python database postgresql security passwords