【问题标题】:Protecting an API key in Python在 Python 中保护 API 密钥
【发布时间】:2016-10-10 00:36:57
【问题描述】:

我正在编写一个 Python 程序,它使用 API 密钥从外部服务访问数据。该程序使用我的 Python 脚本中硬编码的密钥调用此服务。是否有某种方法可以在一定程度上保护此密钥(不是不可逆的方法,而是一种防止人们直接从脚本中复制密钥的方法)?程序是否应该从我的服务器请求密钥?也许是 C 库?

【问题讨论】:

  • 这个脚本是如何分发的,你想保护密钥免受谁的攻击?
  • @deceze 分布尚待评估。我想要的只是防止人们直接从变量中复制密钥。
  • 必须使用此密钥发出 API 请求,对吗?而这一切都在用户的本地计算机上运行,​​他们可以完全控制。计算机所有者可以在很多点处截获密钥。毕竟它存储在他们面前某处的计算机内存中......充其量你只能阻止最不合格的脚本小子。如果这真的需要是安全的,你需要重新考虑你的方法。
  • @deceze 保护最不合格的脚本小子是我希望实现的目标
  • 然后只是混淆它。取一个包含变量中的键的文件,使用一些 Python 混淆器,它以自评估 base64 编码或类似的废话递归地打包代码,然后就可以了。

标签: python security obfuscation api-key


【解决方案1】:

程序是否应该向我的服务器请求密钥?

即使如此,一个积极主动(或技术娴熟,或两者兼有...)的用户也可以通过嗅探 Wireshark 等工具(如果您不使用 https)甚至通过简单地修改脚本来获取密钥在某处添加print

【讨论】:

    【解决方案2】:

    不知道你代码的架构,也许你可以使用以下架构:

    A -> B -> C

    A是你的客户端代码,A向B提交请求

    B 是代理代码,在你的私人服务器上,并且已经在 B 代码中编码了你的 api_key,B 代码会将你的带有 api_key 的 A 请求传输到 C

    C 是外部服务

    然后,客户端代码永远不会记录 api 密钥,api 密钥将在您的私有服务器上,这类似于代理设计模式。

    当然,如果你不想这么复杂,你可以直接使用 Py2exe 将你的 python 代码打包成 exe,这是另一种选择,仅供参考。

    【讨论】:

    • 如果我可以将此标记为也回答我的问题,我会的,但不幸的是我不能。
    【解决方案3】:

    如果你想保护自己免受“黑客”的攻击,那是不可能的,因为如果 python 脚本可以访问你的 API,那么可以修改这个相同的脚本来利用它所拥有的访问权限做一些讨厌的事情。您将不得不在那里找到另一个解决方案。

    如果您想保护自己免受“肩膀冲浪者”(路过时看着您的显示器的人)的伤害,那么 base64.b64encode("key")base64.b64decode("a2V5==") 就足够了。

    【讨论】:

    • 编码不是加密的,不应该被认为比纯文本更安全(因为它是纯文本,只是在另一个基础上,你甚至可以直接从代码中分辨出什么基础) .
    • @DeepSpace 没有人声称这是加密或实际上是安全的。
    • @DeepSpace 我一开始并没有要求加密方法 - 如问题所述。
    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多