Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为selenium测试加密和解密密码?_Python_Django_Postgresql_Selenium - Fatal编程技术网

Python 如何为selenium测试加密和解密密码?

Python 如何为selenium测试加密和解密密码?,python,django,postgresql,selenium,Python,Django,Postgresql,Selenium,上下文正在使用selenium测试web应用程序,同时使用我们为此目的创建的许多虚拟用户帐户。因此,测试过程需要访问我们的站点,并使用虚拟用户的id和密码登录 这些帐户都不是关键帐户,它们被标记为测试帐户,因此不会造成任何损坏。尽管如此,在使用之前对密码进行加密和解密可能是一个好主意 如果有关系的话,我们的测试应用程序是用Python、Django编写的,并使用PostgreSQL作为数据库。它在一个小的Linode实例上运行 对于这样的事情,最佳实践是什么 编辑1 我的另一个想法是将凭据存储在

上下文正在使用selenium测试web应用程序,同时使用我们为此目的创建的许多虚拟用户帐户。因此,测试过程需要访问我们的站点,并使用虚拟用户的id和密码登录

这些帐户都不是关键帐户,它们被标记为测试帐户,因此不会造成任何损坏。尽管如此,在使用之前对密码进行加密和解密可能是一个好主意

如果有关系的话,我们的测试应用程序是用Python、Django编写的,并使用PostgreSQL作为数据库。它在一个小的Linode实例上运行

对于这样的事情,最佳实践是什么

编辑1

我的另一个想法是将凭据存储在第二台机器上,并通过API和API访问它们,同时只允许从已知服务器的非公共IP进行访问。换句话说,在Linode获得两个实例,并在数据中心内创建一个专用机器到机器的连接

在这种情况下,如果能够消除API代码的混淆,那么访问第一台机器将允许有人向第二台机器发出潜在的请求。如果有人真的想要数据,他们当然可以得到

我们可以添加双因素身份验证作为测试的关口。换句话说,即使您有未加密的test_users表,您也不能对它们做任何事情,因为2FA机制只针对这些用户

由于这只是出于测试目的,我开始认为最好的解决方案可能是仅在运行测试时使用有效密码填充
test\u users
表。我们可以在其他地方保证数据的安全,并且有一个脚本,当我们想要运行测试套件时,可以将数据上传到测试服务器。有权访问此表的人无法处理此表,因为所有密码都将无效。事实上,我们或许可以利用这一事实来发现这样的违规行为

我只是讨厌存储未加密密码的想法,即使它是针对测试用户的,而测试用户不能对实际应用程序造成任何损害(他们的交易是虚拟的)

编辑2


对此的改进是继续加密数据并将其保存在测试服务器中。然而,每次测试运行时,系统都会向我们索取加密密钥。而且,在测试运行之后,可能会使用新密钥对数据进行重新加密。有点复杂,但它允许在测试服务器上使用加密密码(甚至用户id,只是为了让它更难)。最重要的密钥将不在服务器附近,每次使用后它都会自毁。

在这种情况下,通常要做的是将密码放入密码,并存储哈希密码

要验证登录,请对提供的密码进行散列,并将计算出的散列与存储的版本进行比较

这背后的想法是,人们认为不可能反转一个好的加密哈希函数。因此,攻击者是否可以读取哈希密码并不重要

Python3中的示例:

In [1]: import hashlib

In [2]: hashlib.sha256('This is a test'.encode('utf8')).hexdigest()
Out[2]: 'c7be1ed902fb8dd4d48997c6452f5d7e509fbcdbe2808b16bcf4edce4c07d14e'

In [3]: hashlib.sha256('This is a tist'.encode('utf8')).hexdigest()
Out[3]: 'f80b4162fc28f1f67d1a566da60c6c5c165838a209e89f590986333d62162cba'

In [4]: hashlib.sha256('This is a tst.'.encode('utf8')).hexdigest()
Out[4]: '1133d07c24ef5f46196ff70026b68c4fa703d25a9f12405ff5384044db4e2adf'
(对于Python2,只需省略
编码


正如您所看到的,即使是一个字母的更改也会导致哈希值发生很大的变化。

这里的目的不是对pwd进行哈希,然后只是比较哈希值。我需要实际使用纯文本密码进行selenium的自动负载测试。在这种情况下,我们的测试工具将检索用户id和密码,并使用它们使用我们的测试用户之一登录到我们的站点。我只是在探索加密密码的想法,而不是将密码以纯文本形式存储在数据库中。我知道这个练习可能是徒劳的,但我至少得想一想。有人建议将密钥或密码短语作为环境变量存储在操作系统中。散列在大多数情况下都很好,但不幸的是,对于selenium测试,必须在密码中输入真实密码field@martin假设假设攻击者可以访问存储密码的机器,你只能让攻击者慢下来。@RolandSmith,请看我的编辑。你是对的。“我不确定这个问题是否有真正的解决方案。@马丁的回答是:“我不会太担心测试密码。”。如果攻击者可以访问数据库,则表示您的安全性已被破坏。