假设您有一个使用 SOAP 连接您的后端的移动应用程序(Windows Phone 或 Android)。
为了简单起见,假设我们有一个用 C# 实现的 Web 服务。服务器公开以下方法:
[WebMethod]
public string SayHallo() { return "Hallo Client"; }
从服务器的角度来看,您无法判断调用者是您的移动应用程序还是试图调试您的 Web 服务的开发人员,还是试图逆向工程/利用您的后端的黑客。
如何确定 Web 服务调用的来源是应用程序?因为任何拥有 WSDL 的人都可以调用 WS。
我知道我可以对 Web 服务实施一些标准的安全措施,例如:
- 在服务器上实施 HTTPS,以便消息加密传输并降低窃听的危险。
- 使用摘要/散列算法在客户端对请求进行签名,在服务器中验证签名并拒绝未正确签名的消息。
- 在 HTTP 请求中写入自定义标头。无论如何,可以模拟标题。
但是,任何经验丰富的黑客或知道签名算法的开发人员仍然可以生成签名良好、格式化良好的消息。或者一个真正优秀的黑客可以拆解应用程序并获得我的“绝密”通信协议的隐藏知识。
任何想法如何使 SayHallo() 方法只回答从我的移动应用程序发出的请求?
我们在移动应用程序的上下文中运行,通过硬件访问,可以利用硬件功能完成一些事情。
如果有人想知道,我正在考虑如何使移动应用程序对银行等敏感应用程序足够安全。
谢谢你的想法。