检测仅限iPhone应用程序访问Web服务的最佳做法?

Gai*_*arx 11 iphone web-services

我正在与Web服务一起开发iPhone应用程序.iPhone应用程序将使用GET或POST从Web服务中检索数据,例如http://www.myserver.com/api/top10songs.json,以获取前十首歌曲的数据.

iPhone应用程序没有用户帐户和密码.确保只有我的iPhone应用程序可以访问Web API http://www.myserver.com/api/top10songs.json的最佳做法是什么?iPhone SDK的UIDevice uniqueueIdentifier是不够的,因为任何人都可以伪造设备ID作为使用wget,curl或web浏览器进行API调用的参数.

Web服务API将不会发布.Web服务的数据不是秘密和私有的,我只是想防止滥用,因为还有API将一些数据写入服务器,如使用日志.

Dan*_*iel 6

你能做的就是得到一个秘密密钥,只有你知道,包括在一个md5散列签名中,通常你可以构造签名,如你的参数和值和最后附加的秘密,然后采取md5哈希那...在您的客户端和服务端都这样做并匹配签名字符串,只有当签名匹配时才会被授予访问权限......因为秘密只出现在签名中,所以很难进行逆向工程和破解..

  • 好吧,如果你嗅到http请求并重新发送它就像确定你会得到一些回应,但没有人能够生成他们自己的请求,因为他们不会知道这个秘密 (2认同)

Her*_*rms 5

以下是丹尼尔建议的扩展.

有一些服务器和客户端知道的共享秘密.说一些长的随机字符串.

然后,当客户端连接时,让客户端生成另一个随机字符串,将其附加到共享字符串的末尾,然后计算MD5哈希值.

将随机生成的字符串和哈希作为参数发送到请求中.服务器知道秘密字符串,因此它可以生成自己的哈希值,并确保它与从客户端收到的哈希值匹配.

这不是完全安全的,因为有人可以反编译您的应用程序以确定秘密字符串,但它可能是您在没有大量额外工作的情况下获得的最佳选择.