如何validationWeb服务调用的来源

假设您有一个移动应用程序(Windows Phone或Android),它使用SOAP连接您的后端。

为了方便起见,我们假设我们有一个用C#实现的Web服务。 服务器公开以下方法:

[WebMethod] public string SayHallo() { return "Hallo Client"; } 

从服务器的角度来看,您无法判断调用者是您的移动应用程序还是尝试调试Web服务的开发人员或试图对您的后端进行反向工程/利用的黑客。

如何识别Web服务调用的来源是应用程序? 任何拥有WSDL的人都可以调用WS。

我知道我可以对Web服务实施一些标准的安全措施,例如:

  • 在服务器上实施HTTPS,使邮件加密,减少窃听的危险。
  • 使用摘要/散列算法在客户端对请求进行签名,validation服务器中的签名并拒绝未正确签名的消息。
  • 在HTTP请求中编写自定义标头。 无论如何都可以模拟标题。

但是,任何经验丰富的黑客或知道签名算法的开发人员仍然可以生成签名良好,格式正确的消息。 或者一个非常好的黑客可以反汇编应用程序并访问我的“绝密”通信协议的隐藏技术。

任何想法如何使SayHallo()方法只回答我的移动应用程序的请求?

我们在移动应用程序的环境中运行,通过硬件访问,可以利用硬件function完成某些任务。

如果有人想知道,我正在考虑如何使移动应用程序足够安全,以便敏感的应用程序,如银行业务。

谢谢你的想法。

如果您想validation用户是否都是移动用户以及 他们说自己 ,那么最好的方法就是利用网络。 使用您希望用户通过的哈希键发送推送通知:

  • 适用于iOS的APN

  • 像Windows手机的城市飞艇

  • 适用于Android的GCM 。

您所描述的是双向身份validation。 它只能通过在通信的两侧存储签名的公钥(证书)来完成。 这意味着每个应用程序都需要使用您的服务器公钥来validation您的服务器,并且服务器需要对您的应用程序的每个实例进行身份validation。 应用程序的公钥在部署时需要与应用程序的每个实例一起生成并存储在服务器上。 可以将其视为双向HTTPS,通常,唯一需要完成的身份validation是一个方向,浏览器使用受信任的签名密钥对服务器进行身份validation。 在你的情况下,这需要双方都做。 通常情况下,你会有一个像VeriSign这样的服务签署公钥的每个实例,这可能会使应用程序的多次部署相当花钱。 在您的情况下,您可以使用OPENSSL之类的东西创建内部签名应用程序,以便在每次分发时对您的应用进行签名。 这并不意味着有人仍然无法破解您的代码并在应用程序端提取签名密钥。 一般来说,任何代码都可以被黑客入侵,这只是一个问题,即你在放弃之前有多难做到? 如果您要使用自定义硬件路由,那么诸如加密芯片和TMP之类的东西可以作为关键的sotre,并使人们更难以访问设备上的私钥。

快速谷歌搜索出现以下情况:

http://www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication

如果您正在考虑使用奖励积分,并且真的担心有人从外部游戏系统,则更好的解决方案是让每个人创建一个安全存储在服务器上的帐户,并在那里保存和记录他们的积分。 这可以集中所有数据,并允许您完全控制它,而不必担心恶意应用程序报告不存在的点。 (这是银行的工作方式)

通常,模型看起来像:

  • 服务器使用经过认证的公钥对许多客户端进行身份validation(这是整个公钥基础结构,证书颁发机构等)
  • 每个客户端通过其他一些身份validation系统向服务器标识自己(在99.9%的情况下,这是一个密码)

因此,如果你想知道这种事情在银行应用程序等方面是如何工作的,基本上它是如何分解的:(1)客户端和服务器使用服务器的公钥建立一个安全通道,如共享密钥, (2)客户端使用其他机制通过此安全通道进行身份validation。

然而,你的问题似乎更多地针对应用程序进行身份validation(即,来自您的应用程序的任何请求都是可信的),并认为如果只有您的应用程序可以进行身份​​validation,并且您的应用程序运行良好,那么一切都应该是安全的。 这有一些影响:

  • 这意味着您的应用的每个用户都是可信任的。 在安全方面,它们是您“ 可信计算基础 ”的一部分。
  • 尝试实现这种目标而不考虑用户/用户的计算平台是否可信,这实际上是DRM的目标; 虽然它足以为音乐出版商省钱,但它对于一些非常敏感的东西来说已经足够接近了。

一般来说:

  • 如果您正在寻找非常强大的安全属性,那么您特别关注的问题非常难以解决。
  • 您可能不需要解决该问题。
  • 如果您给我们更多的背景信息,我们可能会给您更具体的建议。

除了已经给出的答案,如何使用具有电话的唯一ID和密码的登录types方案? 让用户注册您的“后端”,每次必须使用后端进行交易,需要密码或有自动登录选项。

您可以使用以下方法来保护和跟踪对服务器的请求。

  1. 在通过REST methods访问Web服务时,您可以强制移动或Web客户端向您发送设备types的Custom Headers

  2. 通过强制每个客户端拥有自己的用户名和密码作为授权的Web服务提供商来使用基本的http身份validation。

  3. 如果您需要更高级的保护,可以使用OAuth 2.0来保护您的Web服务。

由于您的原始应用程序将是Android或Windows Phone应用程序,因此对于想要黑客调试而言,其中任何一个都相对容易。 在任何情况下,你将在你无法控制的机器上运行代码,所以没有ssl技巧或检查签名将解决你的根本问题。

你可以对抗威胁的唯一方法就是不信任客户。 如果您正在制作游戏,请确认来自客户端的输入在作出之前是有效的 – 它附带有效的安全令牌等。

本质上构建您的服务,以便用户使用非官方客户端无关紧要。