2016-01-10 235 views
1

我正在开发一个Android和iOS应用程序,它将使用我在单独的服务器上开发的RESTful API。应用程序将简单地戳到端点以更新数据库中的数据并在需要时检索信息。我的问题是没有这样做,API的架构已经设置,我只需要考虑最安全的方式来实现它。RESTful API身份验证和安全

我有一个API密钥系统,要求将API的任何用途与请求配对,以防止没有密钥的人访问API。这很好,但我担心那些更有决心要突破系统的人。特别是在Android方面,可以反编译应用程序,并且可以查看(某些)代码。我很确定可以查看字符串,所以我担心如果有人反编译应用程序,他们将获得API密钥的位置并能够访问该API。

我在寻找使API更安全的建议。我已经考虑在更新信息时将另一个独特的值与API Key配对,但我不确定这是否也能很好地工作。

任何建议都非常感谢它。

+0

如何跟踪,如果你使用的所有应用程序的用户相同的密钥,其用户发出请求?如果你为每个用户发布一个唯一的密钥,看起来你遇到的问题应该不是真正的问题。如果他们以某种方式对你的api进行逆向工程并使用他们的密钥,他们仍然只能被允许执行他们被允许的执行行为。 – JimL

+0

每个用户将有一个唯一的标识号码,通过其他第三方服务接收。因为这个号码可以在一个单独的应用程序中再次找到,所以我想创建另一个唯一的识别号码,通过数据库自动生成。我想这样会很安全。嗯。 – Jmrapp

+2

我更喜欢一些散列值。如果恶意用户看到他们的api密钥是1000135,那么他们肯定会尝试1000136等等。 – JimL

回答

0

你说得担心你的应用程序可以被反编译。代码和字符串存储在清除中。事实上,这是相当微不足道的事情。

我听说有人在看两个应用程序:一个包含明文电子邮件服务密码和用户名,对垃圾邮件制造者非常有用。另一个公开的“随机”数字算法允许黑客使用公共交通工具免费生成今天的“随机”数字并免费乘坐。

您可以通过提高标准:

  • 模糊处理您的代码的工具。一些工具将提供加密字符串的功能。
  • 使用每次新安装的新加密密钥对应用程序中的敏感字符串进行手动加密,拆分加密密钥并将其隐藏在多个不同位置(例如,在代码,数据库中的一部分,一部分在OS部分和应用ACL到外部位置
  • 使用传输安全(如TLS),以减少
  • 使用API​​速率限制在服务器上的人在这方面的中间人攻击风险侧
  • 介绍地理位置服务,以查看是否相同的API密钥是从不同的地点使用,同时