Python 如何在将分发给客户端的应用程序中保护API密钥
我正在构建一个使用双腿身份验证的应用程序。我得到了API密钥和API秘密,但现在我感到困惑 我目前正在将我的api密钥和机密存储在Python 如何在将分发给客户端的应用程序中保护API密钥,python,api,api-key,Python,Api,Api Key,我正在构建一个使用双腿身份验证的应用程序。我得到了API密钥和API秘密,但现在我感到困惑 我目前正在将我的api密钥和机密存储在.yml文件中。但我想分发.app代码,它最终将拥有.yml文件 但是.app文件将包含.yml文件,这是不好的,因为每个人都可以看到API密钥和密码 如何存储API密钥和密码,以便我的应用程序可以在用户看不到的情况下访问密钥和密码?答案取决于几个变量: 包括你的消息来源吗 可以使用服务器为您调用API吗?如果是这样,您是否也可以对服务器发出的呼叫应用限制 将编译代码
.yml
文件中。但我想分发.app代码,它最终将拥有.yml文件
但是.app文件将包含.yml文件,这是不好的,因为每个人都可以看到API密钥和密码
如何存储API密钥和密码,以便我的应用程序可以在用户看不到的情况下访问密钥和密码?答案取决于几个变量:
example.com/api/v1
,并且您希望使用一组特定的参数调用一个特定的函数,那么您只能允许对该特定api、该特定的参数集和该特定函数的请求。这样,它对潜在的攻击者来说毫无意义,因为它只调用一个函数而不调用其他函数
源代码不包括在内,使用服务器不是选项,编译代码也不是选项
嗯,你没什么办法,模糊处理是你最好的办法。这样做的最佳方法是将其隐藏在代码深处,并使其变得模糊,等等
源代码包括在内,使用服务器不是一个选项,但您可以使用编译后的代码
使用真正模糊的程序集,如果可以,请不要共享该程序集的源代码。例如,您可以使用“红鲱鱼”指令,就像以前一样,您应该将其隐藏在代码的深处
源代码不包括在内,使用服务器不是一个选项,但您可以使用编译后的代码
对于这一点,它与上面相同,因为不包括程序集的源代码
<强>如果我没有在这里列出您的场景,请自由地评论,我将编辑我的回答<强> < /p> 虽然我认为现有的答案在技术上是正确的,但可能会指出分布式软件中的硬编码API密钥存在一些安全问题。 API密钥的性质是不稳定的,它不是设计为永久的
如果API密钥无效,会发生什么情况?这难道不会让所有分布式软件都变得无用吗? 如果API密钥具有写入权限并且被泄露,会发生什么情况?您如何区分合法和恶意写入 尽管我了解开销,但最终用户可以设置由最终用户自己获得的专用密钥的场景,以及替换初始密钥的方法将有助于解决上述两个问题API的关键功能之一是由代表用户的机器使用,但如果所有用户都相同,则此功能将变得毫无意义。相关:这里的答案似乎集中在已编译的应用程序上。是的,有些可以应用于Ruby或Python脚本。例如,我可以设置一个单独的服务器来保存密钥并通过它路由请求;但是,对于一个200行的脚本来说,这似乎有点过分了,否则它就不会有任何外部基础设施。因此,(1)包含源代码,(2)使用服务器不是一个实用的选择(程序不够大/复杂,(3)使用编译代码也不实用(它将比脚本本身更复杂)。嗯,很遗憾,在这方面帮不了你。Castels的答案是对的