【发布时间】:2019-06-19 07:40:18
【问题描述】:
我正在审查 Python 代码的安全性。
为此,我使用了 Bandits(Python 的一个模块)和 DeepCode (www.deepcode.ai) 等工具。 Bandit 发现硬编码登录名和密码存在一些漏洞,而 DeepCode 没有发现漏洞。这是有问题的代码:
# Guest only login
# Used for Login as Guest button and login the current session as GUEST
APP_GUEST_USERNAME = "ppams.asguest"
APP_GUEST_PASSWORD = "ppams123456"
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '10-6d$q$&xxc9heb(hjeda$w%7pxC#+hhx%b0xl&_q(p8(u#uu'
我发现不应对凭据进行硬编码的文章。这里有一些文章:https://qxf2.com/blog/dont-hardcode-usernames-and-passwords-in-your-test-scripts/; https://www.owasp.org/index.php/Use_of_hard-coded_password ; https://www.preemptive.com/blog/article/1059-create-more-secure-applications-don-t-hard-code-credentials-instead-use-application-hardening/106-risk-management.
那么,使用硬编码凭据有什么风险?你能给我看一些样品吗? 如果凭证不能被硬编码,那么保护凭证的替代方法是什么?
谢谢
【问题讨论】:
-
显而易见的问题是,您无法在公共存储库中发布您的代码而不泄露 bean。通常,您会将这些值放在单独的(未提交的,gitignored)配置文件中,或者从环境变量中提取它们。如果您是自托管,第一个更容易;如果您使用例如后者是常态从存储库部署的 Heroku 或类似平台。
-
另一个将敏感数据检入源代码存储库的示例(这种情况经常发生):medium.com/@nagguru/…
-
另见 10 大开发者加密错误中的第 1 点:littlemaninmyhead.wordpress.com/2017/04/22/…