我目前正在开发一个应用程序,它从我编写的web服务(在.net中)下载信息,我想保护连接,以便只有我的应用程序才能从服务中获取数据。解决这个问题的最佳方式是什么?
如果他们对我的应用进行反编译/反向工程,我不希望任何人能够获取访问详细信息。有没有办法可以在发送回来之前验证请求数据的应用程序的完整性?
我不关心他们是否能够嗅探流量以查看其中包含的内容,我只是不希望我的应用程序以外的任何内容能够提交请求以防止任何人抓取所有数据。< / p>
我是安全的新手,请尽可能简单!
答案 0 :(得分:2)
克里斯,
您可以阅读称为一次性密码(OTP)的机制。 http://en.wikipedia.org/wiki/One-time_password
您可以设计应用程序,以便在尝试连接到Web服务时生成OTP。验证OTP真实性的责任在于Web服务。
现在让我详细介绍一下。想象一下,您的应用程序在其中嵌入了一种算法,该算法在连接到Web服务时生成并提供256位数字。您设计的Web服务还实现了OTP的验证器部分。通常OTP算法在其实现中考虑“一天中的时间”(我建议谷歌周围的一些免费实现)。因此服务器端(OTP Validator)仅在服务器和客户端上的时间在刷新时间n的窗口(比如+ - n秒)内时才有效。通常,OTP验证器也会在其端生成OTP,只是比较收到的OTP。您可以在发送之前另外HASH OTP并比较服务器上生成的OTP的HASH(虽然没有帮助或更安全)。
现在问题出现了,如果有人得到算法怎么办(可能你只是使用开源OTP)。好吧,它的意思是。只有正确的密码才能访问良好的安全实施,即使攻击者可以使用其他所有密码。要做到这一点,您可能必须添加一个逻辑来在他们第一次连接时配置您的应用程序,这是OTP所期望的。在这里,我假设首次使用的信任。您可以添加一些逻辑来存储在计算OTP时使用的唯一常驻应用程序ID。此外,您将在服务器上维护“resident-id”到“public-id”的映射。这是“公共ID”,您可以附加到OTP并发送到服务器以验证应用程序发送确实是您配置的那个。这要求您在服务器上将“public-id”映射到“resident-id”,然后在生成OTP时以相同的方式使用“provisioned-id”。
除此之外,您还可以添加一次逻辑来娱乐OTP +“public-id”组合。这可以防止重播攻击,以防有人嗅探并重新向您的Web服务发送相同的请求。
希望这会给你一些想法。
Ujjwal
答案 1 :(得分:0)