2013-06-12 98 views
5

我正在使用自定义授权方法处理以API为中心的Web应用程序,该方法包括基于请求方法,URL,参数,公开API密钥并由专用API密钥编码。这在服务器端工作正常,但在客户端,私有API密钥(和授权方法)将会受到攻击。我花了最后一个小时左右的时间寻找一个很好的方法来保护这个API密钥,我能找到的最好方法是通过我的服务器进行代理,但我仍然无法确定100%。保护客户端(JavaScript,Android,iOS等)上的API密钥

首先,我应该担心吗?我想在我的Web应用程序中将安全性设置为优先级,但任何将修改用户帐户的操作都需要一个临时的加密标记来授权请求​​(除了HMAC散列)。

我从代理的理解是,你会向你的服务器发出请求,然后用私钥加密并返回信息..但是服务器如何验证请求是否来自具有有效API的源键?

任何人都可以提供任何见解,我应该做什么?我觉得这可能是任何客户端代码(包括JavaScript,iOS和Android)的潜在漏洞。

+1

请[不要在您的帖子中使用签名或标语](http://stackoverflow.com/faq#signatures)。 – meagar

+0

私钥以何种方式易受攻击?你必须把钥匙给客户或它不会工作...... – dandavis

+0

目前,客户只会是我的官方应用程序(网络和手机)。但私钥和授权方法将在JavaScript源代码中可见,以便在网站上进行任何AJAX调用。 – Sam

回答

4

你永远不能相信客户。即使你混淆,有人仍然可以弄明白。例如,攻击者可以对混淆算法进行反向工程,查看设备内存,甚至可以捕获通过线路发送的内容。

但是,您仍然可以通过在服务器端强制安全来制作安全的应用程序。例如,用户需要进行身份验证才能成功进行特权API请求。

此外,无论是通过输入验证,速率限制还是IP地址跟踪,您都可以在服务器端强制执行A​​PI使用。

+0

每当我回过头来看这个问题时,我都会看到“你永远不能相信客户。”我已经成为这种心态的忠实粉丝,甚至还帮助简化了一些API创建(即无需在注册时进行密码确认,因为客户端无论如何都可以伪造)。 – Sam

+0

@sam确认是让用户确保他们键入他们认为他们键入的内容。以错误的方式错误输入密码的可能性较小。 –