2015-05-12 78 views
5

我知道这些问题已经单独提出几次,我发现的大多数答案是“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)的小型Python应用程序。 OAuth需要消费者密码,该密码远离用户。该应用程序需要这些信息,但用户不应该能够轻松访问它。如果这些信息不能被保护(并且我使用混淆和保护作为同义词,因为我不知道其他方式),首先为Python创建OAuth API有什么意义?然后

的问题(S)是:

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

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

+1

谁是这个问题中的“用户”,你的客户? (您建议将应用程序与一个密钥一起“运送”,但我不确定您的意思是否是字面意思。) –

+0

用户只是我自己,这不是一个严肃的项目。我想知道如何使用OAuth实际发布(例如,使其在他们的网站中可用)的Python应用程序实现它。 – user2891462

+0

这是关于讨论的问题[这里](http://blog.codinghorror.com/keeping-private-keys-private/)? – TigerhawkT3

回答

-1

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

+0

小心开发更多? AFAIK,实施你自己的密码功能是非常不明智的,问题仍然存在:我在哪里安全地存储对称密钥? – user2891462

+0

根据你的幻想,编码你自己的非常简单但很难翻转的地穴功能大约需要1-3个小时)。 除了Khnowing密钥外,如果不知道加密算法,它不会泄露数据。 您也可以使用随机生成的随机密钥。 – psyskeptic

0

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

-1

目前还不清楚为什么您需要将您的 OAuth密钥与脚本一起运输。这意味着任何人都可以访问您的 Twitter帐户,无论该密钥本身是否在应用程序内部被混淆。

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

+0

如果我正确理解Twitter的OAuth,则消费者密钥和使用者密钥会将我的客户端识别为API。客户端的所有实例都将共享它们,而访问令牌对于每个用户都有所不同(请参阅https://dev.twitter.com/oauth/overview/single-user中的示例)。我不会让他们访问我的帐户,但他们可以在Twitter API的视图中模仿我的客户。 – user2891462

+0

是的,无论是直接还是间接地将您的OAuth令牌添加到应用程序中,您都可以假设您就Twitter而言。所以IMO有更大的问题;这是真的吗?你想要做什么? (提示:不,可能不是。) – deceze

+0

那么,客户需要做的第一件事就是向Twitter进行身份验证,以便使用API​​(请参阅https://github.com/bear/python-twitter#api ),并且它需要消费者密钥和秘密。就我所知,没有办法解决这个问题。你会为基于Python的Twitter客户端提出什么模式,而不会泄露这个秘密? – user2891462