在Python

时间:2015-05-12 12:34:55

标签: python security oauth obfuscation

我知道这些问题已经分别在几次之前被问过了,我发现的大部分答案都是“Python不容易混淆,因为这是语言的本质。如果你真的需要混淆,请使用另一个工具“和”在某些时候你需要权衡“(见How do I protect Python codeHow to keep the OAuth consumer secret safe, and how to react when it's compromised?)。

但是,我刚刚制作了一个小型的Python应用程序,它利用了Twitter的API(因此需要OAuth)。 OAuth需要消费者秘密,远离用户。应用程序需要该信息,但用户不应轻易访问它。如果无法保护该信息(我使用混淆和保护作为同义词,因为我不知道其他任何方式),首先为Python创建OAuth API有什么意义?

然后问题是:

  • 是否可以在应用中硬编码秘密然后 以有效的方式混淆它?
  • 如果没有,那么在Python中使用OAuth的最佳方式是什么?我曾想过将加密的消费者秘密与应用程序一起“运送”并使用硬编码密钥来恢复它,但是问题依然存在(如何保护钥匙);让消费者在服务器中保密,并让应用程序在启动时检索它(如果信息是未加密的,那么恶意攻击者更容易使用Wireshark并让消费者对网络流量保密,而不是反编译字节码,我怎么能确保我将这个秘密发送到我的应用程序而不是恶意攻击者?我知道任何形式的身份验证都需要在应用程序端获得秘密信息,问题仍然存在;两者的混合(让服务器发送加密密钥,与以前一样的问题)。基本问题是相同的:如果无法隐藏重要信息,你怎么能保密呢?

我也看过评论说应该对那些关键部分使用C / C ++扩展,但我对此一无所知,所以如果这是答案,我会很感激一些额外的信息。

3 个答案:

答案 0 :(得分:0)

如果要在自己拥有的服务器(或笔记本电脑)上部署,可以在env var或文件中存储机密。如果要部署到用户,建议您或您的用户应注册API密钥,生成ssl密钥或类似密钥。

答案 1 :(得分:-1)

您可以使用大量数据操作编写自己的简单对称隐藏函数,以使其更难逆转。

答案 2 :(得分:-1)

目前还不清楚为什么您需要使用脚本发送您的 OAuth密钥。这意味着允许任何人访问您的 Twitter帐户,无论密钥本身是否在应用内部进行模糊处理。

更典型的情况是您开发了一些Twitter客户端,任何想要在本地运行它的人都必须输入他们自己的 OAuth令牌才能运行它。您根本不对令牌进行硬编码,并要求任何用户提供令牌。