在Python脚本中保护密码

时间:2016-04-29 19:52:06

标签: python password-protection

我有一个我在本地运行的python脚本,它有一个密码,用于嵌入在os.system调用中的另一个应用程序。我将密码存储在只有我有权访问的数据库中,然后使用Windows身份验证连接到数据库(因为脚本需要自动化我无法提示输入密码),因此我对密码进行了模糊处理。

有了上述说法,我突然意识到,有人只是修改我的脚本并打印出来的' pw' var获取我的密码?我在共享云环境中工作,其他开发人员可以访问我的脚本。有没有办法进一步抽象它,所以有人不能修改我的脚本并获得pw?

import os
import sqlalchemy as sa
import urllib
import pandas as pd


#Specify the databases and servers used for reading and writing data.
read_server = '~~SERVER_HERE~~'
read_database = '~~DATABASE_HERE~~'

#Establish DB Connection
read_params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+read_server+";DATABASE="+read_database+";TRUSTED_CONNECTION=Yes")
read_engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % read_params)

#Read PW from DB and set to variable
pw_query = """ SELECT DISTINCT PW FROM ~~TABLENAME_HERE~~ """
pw = pd.read_sql_query(pw_query,con=read_engine,index_col=None)
pw = pw.values.tolist()
pw = str(pw[0])
pw = pw.lstrip("['").rstrip("]'")

#Establish connection to server
os.chdir(r"C:\tabcmd\Command Line Utility")
os.system(r'tabcmd login -s https://~~myURL~~ -u tabadmin -p {mypw}'.format(mypw = str(pw)))
#Make sure you update the below workbook, site names, and destination directory.
os.system(r'tabcmd get "~~FILE_Location~~" -f "~~Destination_DIR~~"')

我使用标准python(Cpython)和MS SQL Server。

2 个答案:

答案 0 :(得分:1)

如果有人可以修改脚本,则无法保护您的密码。

但是,如果共享云环境具有单独的用户(即通过ssh登录,其中每个人在服务器上都有自己的用户),则可以更改权限以限制对代码的访问。如果没有,那么我认为这是不可能的。

答案 1 :(得分:1)

鉴于您还要对数据库地址和访问代码进行硬编码,例如,没有什么能阻止其他人连接到您的数据库。

有些方法可能会混淆您的代码,但最终,没有安全的方法来存储您的密码,只需要更多的工作来提取密码。

另见https://crypto.stackexchange.com/questions/19959/is-python-a-secure-programming-language-for-cryptography

TLDR;只要有人可以访问您的程序甚至源代码,就可以提取硬编码的密码 - 因此,在您的情况下,限制对该程序的访问是有意义的。