【发布时间】:2015-08-13 01:24:20
【问题描述】:
上下文是使用 selenium 测试 Web 应用程序,同时使用我们为此目的创建的许多虚拟用户帐户。因此测试过程需要访问我们的站点并使用虚拟用户的 id 和密码登录。
这些帐户都不是关键帐户,它们被标记为测试帐户,因此不会造成任何损害。不过,在使用之前加密密码并解密它们可能是个好主意。
如果重要的话,我们的测试应用程序是用 Python、Django 编写的,并使用 PostgreSQL 作为数据库。它在一个小型 Linode 实例上运行。
这样的最佳实践是什么?
编辑 1
我的另一个想法是将凭据存储在第二台机器上并通过 API 访问它们,同时只允许从已知服务器的非公共 IP 进行访问。换句话说,在 Linode 获取两个实例并在数据中心内创建私有机器对机器连接。
在这种情况下,如果某人能够对 API 代码进行去混淆处理,则访问第一台机器将允许他们潜在地向第二台机器发出请求。如果有人真的想要数据,他们当然可以得到。
我们可以添加两因素身份验证作为门控测试的一种方式。换句话说,即使您有我们未加密的 test_users 表,您也无法对它们执行任何操作,因为 2FA 机制仅针对这些用户。
由于这仅用于测试目的,我开始认为最好的解决方案很可能是仅在运行测试时使用有效密码填充test_users 表。当我们想要运行测试套件时,我们可以将数据安全地保存在其他地方,并拥有一个将数据上传到测试服务器的脚本。有权访问此表的人无法使用它,因为所有密码都将无效。事实上,我们或许可以利用这一事实来检测此类违规行为。
我只是讨厌存储未加密密码的想法,即使它是为了测试用户而不能真正对实际应用造成任何损害(他们的交易是虚拟的)。
编辑 2
对此的改进是继续加密数据并将其保存在测试服务器中。但是,每次运行测试时,系统都会与我们联系以获取加密密钥。而且,也许,在测试运行之后,数据会用新密钥重新加密。有点令人费解,但它允许在测试服务器上加密密码(甚至是用户 ID,只是为了让它更难)。最重要的密钥不会靠近服务器,每次使用后它都会自毁。
【问题讨论】:
标签: python django postgresql selenium