我正在创建一个iphone应用程序。
在应用程序中,我需要与数据库进行通信。我环顾四周,发现最好的方法是iPhone - >网络服务器 - > MySQL的。
如果我使用https,则流量不会是纯文本。
但我仍然担心安全问题。
假设我已经知道,auth.php会在当前会话中使用网络服务器,如果我有游戏或其他东西并使用registerresult.php注册结果,用户仍然可以登录通过网站上的auth.php并将自己的结果注册到registerresult.php。
(我使用POST方法发布数据)
你看到了问题吗?
但是,这真的是一种好方法,还是更好? (每个语句发送一个硬编码的“密钥”)
如果没有使用https,那么该密钥仍然是纯文本的?
答案 0 :(得分:2)
(升级到答案)
实现完全安全是不可能的:你必须始终考虑威胁是什么(来自谁,资源如何等等),以便充分防御它们。
例如,即使您在将结果数据发送到registerresult.php
页面之前对结果数据进行加密签名,签名密钥仍必须嵌入用户手机上的应用中 - 因此确定的破解者仍然可以提取密钥并发送伪造的结果。我认为你必须在你的服务器上运行游戏,以便在那里保存状态信息,以便击败那种性质的威胁。
然而,任何人都不太可能花这么长时间来破解iPhone游戏(除非游戏非常受欢迎或者支付了一些物质价值的奖品)。如果一些技术高超的人成功发送伪造的结果,对你来说真的很重要吗?值得思考。
如果您认为可以容忍此类威胁,则您的问题中引用的方法存在一些缺陷。虽然HTTPS确实可以保护秘密密钥不被数据包嗅探器拦截,但它并不能阻止它被提供电话接受的SSL证书的透明代理拦截(例如已添加到自身的自签名证书)它的钥匙串)。
为了打败这种类型的威胁,我建议您计算(数据+随机盐值+密钥)的安全散列并将(数据,相同的盐值,该散列)发送到服务器;然后,服务器可以重新计算散列应该来自已知密钥的内容,并检查它是否根据收到的散列进行验证。
答案 1 :(得分:0)