2012-07-13 121 views
21

因此,我正在开发一个小应用程序,仅供我自己使用,也许是Git上的一个开源项目。我使用的是Envato Marketplaces的API,而且大家都知道有些操作不需要任何密钥,但同时也有一些操作需要。如何在使用JavaScript时保护API密钥?

我首先为PHP中的Envato API做了一个很好的API包装,但后来我决定尝试一点JavaScript,所以我正在开发与JavaScript相同的包装。到目前为止,我对公共操作没有任何问题,但我现在必须使用API​​密钥。

我的问题是如果有一种方法可以保护JavaScript中的API密钥。我不能将它放在纯文本中,因为它可以被看到代码的其他人使用。那么API会保密吗?也许从XHR的JSON文本文件中抓取它?

+3

让您的javascript调用与服务器端php进行交互以调用需要隐私的方法。 – asawyer 2012-07-13 12:23:28

+1

@asawyer:你应该把它作为答案 – Dancrumb 2012-07-13 12:26:49

+0

@asawyer - 就是这样,我已经用PHP做了,现在我只想用JS做它。所以只用JS来做就不可能了?如果我使用XHR从JSON文件中获取密钥并将其传递给该方法,那该怎么办? – Roland 2012-07-13 12:27:08

回答

18

简短的回答:没有

无论你做什么混淆的关键,你还是得把它以使其可在客户端上不知何故,因此将有可能使用外汇进行解压缩。萤火虫。

即使您设计了一个令人敬畏的神奇方式来保留关键的秘密,在某些时候,您将不得不做出实际的API请求,并且因为它必须从浏览器发送,攻击者将能够从Firebugs net标签中以纯文本格式读取密钥。

正确的做法是围绕需要键的API调用创建一个PHP包装器,然后从Javascript调用该包装器。

+9

密钥将被保护,但操作不会。如果门打开,小偷不需要钥匙。 – 2013-07-23 14:37:43

+2

PHP封装器能否强制请求来自同一个域?这与“同源政策”有何关系?看起来它不可靠确定请求者:http://stackoverflow.com/questions/1153967/php-source-hostname-of-a-get-request ...? – Toph 2013-10-04 22:01:18

+1

包装如何改变任何东西? – 2016-04-21 12:27:15

相关问题