我应该如何将API密钥存储在Python应用程序中?

问题描述:

在我的情况下,我正在使用Dropbox API。目前,我将密钥和密钥存储在一个JSON文件中,以便我可以对其进行gitignore并将其保留在Github repo之外,但显然这并不比从安全角度考虑代码更好。关于保护/混淆Python之前存在很多问题(通常是出于商业原因),答案总是“不要,Python不适合这样做”。因此,我不是在寻找一种保护代码的方法,而是一种解决方案,它可以让我分发我的应用程序,而不会公开我的API细节。我应该如何将API密钥存储在Python应用程序中?

+0

将它们作为加密值填入文本文件中。创建一个私人存储的加密密钥,在需要时解密。虽然可能有更好的方式,但这种方式在过去对我很有帮助。 – 2012-04-27 19:46:08

+0

如果有人在他们的计算机上运行该程序,并且该程序使用该密钥,则会实际披露该密钥。它不需要一个天才就可以启动WireShark,让程序连接,并过滤捕获连接到Dropbox(或其他一些标准 - 最糟糕的情况下,你要挖掘几百个数据包)。只是混淆程序不会为你购买任何东西,因为你不能改变API密钥的字符串,或者它对你的程序没有用处。 – delnan 2012-04-27 20:22:27

+0

@delnan但是API密钥在HTTP流量中可见吗? Dropbox通过SSL进行一切操作。我不知道他们是使用GET还是POST变量,或者只是将它们放在HTTP请求的头文件中。这些事情是通过HTTPS请求加密的,还是仅仅是请求的主体? – espekia 2012-04-29 08:58:48

纯文本。如果代码被分发,任何模糊尝试都是徒劳的。

不知道你的情况是否可行。但是您可以通过您托管的代理访问API。

来自Python APP的请求转到代理,代理向Dropbox API发出请求并将响应返回给Python应用程序。这样您的api密钥将位于您所托管的代理服务器上。访问代理服务器可以通过您喜欢的任何方式进行控制。 (例如用户名和密码)

+0

总的来说,这是一个很好的解决方案,但在我的情况下,我选择专门使用Dropbox,因为我既没有资源也没有倾向于托管自己的服务器,我只想专注于制作客户端。 – espekia 2012-04-28 08:14:51

有根据您的情况有两种:

如果你正在为最终用户提供一个web应用,只是它托管的方式,你的API密钥不来披露。因此,将它保存在一个单独的文件中,并只将其上传到服务器应该没问题(只要没有违反服务器的规定)。任何混淆都不会增加任何实际的好处,它只会给人一种虚假的安全感。

如果您正在为开发人员或最终用户的客户端应用程序开发框架/库,请他们自行生成API密钥。