【发布时间】:2011-07-16 00:12:16
【问题描述】:
我有一个连接到数据库的 Python 脚本。为此,显然,我需要密码。我需要把它藏在某个地方。
我的问题是这段代码存储在一个文件夹中,每个有权访问服务器的人都可以查看。所以,如果我把这个密码加密写在一个文件中,在代码中就会出现发现它的密钥,人们可以猜出来。
所以,请,如果有人有想法..
【问题讨论】:
-
那么让文件只有所有者可读怎么样?
我有一个连接到数据库的 Python 脚本。为此,显然,我需要密码。我需要把它藏在某个地方。
我的问题是这段代码存储在一个文件夹中,每个有权访问服务器的人都可以查看。所以,如果我把这个密码加密写在一个文件中,在代码中就会出现发现它的密钥,人们可以猜出来。
所以,请,如果有人有想法..
【问题讨论】:
您正在使用脚本语言并使用密码直接访问数据库。无论您做什么,在某种程度上,该密码都将很容易访问。掩盖它并不能真正给你带来太多好处。
您必须依赖机器的安全性和权限,也许还有数据库(限制特定机器和用户的访问)。
【讨论】:
根本不要将数据库连接凭据存储在 Python 文件中。相反,请将它们存储在安全的地方,只有运行脚本的用户帐户才能读取。
例如,创建一个用于运行此作业的用户帐户,并在该用户帐户的主目录(只能由该用户读取)中创建一个名为 database.ini 的文件,并将数据库连接字符串和密码放在那里。然后使用标准库中的PythonConfigParser类将文件读入。
然后作业可以始终在该用户帐户下运行。您也可以在您的帐户下使用正确的凭据将database.ini 文件放入您的主目录中运行它,但是没有凭据的任何人都无法运行它。
【讨论】:
o+r(或可能是g+r)?我可以阅读脚本,然后执行find 寻找可以访问的脚本。我宁愿锁定脚本本身并允许对特定用户或组执行。
查看this 问题。他们建议在 base64 中编码密码(在脚本之外),然后在脚本中包含该字符串并在建立连接之前将其转换回来
【讨论】:
只是为了强调 Brian 所说的,如果程序自动运行(即,没有机会提示用户输入密码),则在相同用户权限下运行的任何程序都可以访问任何密码。目前还不清楚您可以做什么else。也许如果客户端机器上的(受信任的)操作系统可以向主机证明它正在被从特定路径运行的程序访问,则可以告诉主机“仅打开数据库到 /var/lib/tomcat/bin /tomcat 在 appserver.example.com 上”。如果你完成了所有这些,攻击者将不得不破坏 tomcat 可执行文件才能访问数据库。
【讨论】:
更高级的想法是手动进行 mysql 身份验证。也就是说,学习 mysql 协议(这是一个带有挑战和响应的标准握手)并自己执行该过程。这样,您永远不会直接发送密码。
【讨论】: