在应用程序中保护Web服务

时间:2012-03-04 10:54:54

标签: java android ios scala lift

我将创建一个将使用我正在开发的Web服务的应用程序(iOS和Android)。我将使用HTTPS和SSL,以便从应用程序发送到服务器的数据是安全的。但是,如何阻止(或者让那些反编译应用程序的人的生活)“黑客”反编译URL所写的源代码?

我不希望其他人创建使用我的数据的应用程序。

我的应用的用户必须注册并登录才能使用它。我已经阅读了有关验证用户身份并传回密钥的方法(Facebook的方式)。但是,这不意味着“黑客”可以注册然后使用相同的密钥吗?您是否需要跟踪每个密钥的使用情况以寻找不规则用途?

服务器技术是Java EE或Scala(Lift)。

2 个答案:

答案 0 :(得分:4)

首先:您在不受您控制的设备上运行的任何内容(例如您的iOS和Android设备)都没有100%的安全性。

你可以通过几种措施使“滥用”变得更加困难:

  • 在成功登录后发出会话密钥并设置时间限制,以便在经过一段时间后需要进行新登录
  • 为每个通信步骤发出一个交互键,在一次使用后立即失效
  • 成功登录时,会终止与登录前可能处于活动状态的相同凭据关联的任何其他会话
  • “节流”使用(根据具体应用可能无法实现)

如果你真的想要非常努力,你可以发布特定于设备的客户端证书并使用基于证书的客户端身份验证(在SSL标准中定义) - 如果你看到滥用,你可以使与设备相关的证书无效对其他设备的合法用户没有伤害......

答案 1 :(得分:2)

这或多或少是不可能的。您可以使用字节码混淆来使反编译更难,但任何努力尝试的人都可以看到代码正在做什么。

如果您允许向您无法信任的人访问数据,那么您可以做的唯一事情就是

  • 很好地问(请不要滥用我的数据)
  • 对用户进行身份验证,以便您可以监控个人使用情况,并可能应用使用率或速率限制(如Twitter所做的)
  • 让人们签署法律协议(除非您的数据/应用对他们非常有价值,否则不太可能吸引很多用户!)

还要考虑是否可以执行更多服务器端处理,以便将更少的原始数据发送到客户端。我不知道你的数据是什么样的,但是以地图为例,如果发送预渲染的位图而不是某些纬度/经度矢量数据,那么提取任何有用的东西都是很多更难的工作