是否可以将数据库凭据以纯文本格式存储?

clo*_*hao 33 database security passwords django

默认情况下,Django数据库主机/用户/密码以纯文本形式存储在项目settings.py文件中.

我现在似乎无法想到更好的方法,但这似乎违背了密码存储的最佳实践.当然,如果攻击者可以访问设置文件,那么所有人都可能已经丢失.即使文件是加密的,攻击者也可能有办法在那时解密它.

这个可以吗?

Nul*_*ion 24

你是对的.但您可以通过以下方式提高安

  • 正确设置权限(这取决于您的设置).理想情况下,只有python应该能够读取文件.

  • 将文件存储在wwwhtdocs根目录之外.如果此时攻击者仍然可以访问它们,那么无论如何你都被搞砸了.

  • 为了增加安全性,您可以使用对称加密(例如:AES)加密连接设置.将密钥存储在其他位置.因此,即使有人设法访问连接设置,他们仍然需要找到密钥.主要缺点是现在你必须重写连接方法.

  • 有没有一个例子可以扩展/重写连接方法来处理加密?此外,在unix环境中,如果盒子本身已经受到损害,那么有一个安全的地方可以保留该密钥吗? (4认同)

bil*_*ohi 17

由Heroku编写的十二因素应用程序推荐

严格区分配置和代码.

这对于凭据管理尤其重要,理想情况下,永远不应将其提交给源代码控制.

Django的ENVIRON库提供了一个很好的方法来拉动最具体的环境配置了settings.py文件,但你可以通过只使用标准操作系统资源,如引用最敏感位很长的路要走'PASSWORD': os.environ['DBPASS']

当然,您可能仍然会在某处以纯文本形式存储一些密码,但如果该文件未嵌入您的代码库中,则泄露的可能性要小得多.