2010-06-18 60 views
4

我有一个Android应用程序,我想从中将一些数据上传到我的Web服务器上的数据库。由于MySql java库的大小约为5 MB,因此我不想将其与应用程序一起使用。 因此,我将为php脚本发出HTTP请求,并将URL作为参数发送。我如何确保只有我可以称之为?我不希望人们嗅探URL并在我的应用程序之外调用它。保护HTTP请求不被别人调用

谢谢

+1

这是基于PHP的身份验证的经典案例,最有可能使用的会议... – 2010-06-18 10:44:40

回答

2

使用一个简单的静态令牌来标识客户端是自己还是以提前的方式,首先使用用户名/密码进行身份验证,生成令牌并将该令牌用于进一步的事务处理。此令牌可能会在一段时间后过期。

选项1:http://[your请求URL] &键= XYZ 其中xyz是只知道你

选项2:用户名密码,并成功验证第一个ping服务器获取动态令牌[DKEY],本地存储它。 然后进一步请求。 http://[your请求url] & key = dKey。

选项2是通常所遵循的选项。

+0

谢谢。我生成一个在1分钟后过期的令牌。这似乎是最好的办法。 – Kaloer 2010-06-19 07:53:34

1

简短的回答:你不能防止嗅探。

但是你可以让嗅探的生活更难通过实施一些内部认证,GET/POST预定义的参数(或动态,而是通过算法计算出你只懂得)交换,隐藏头字段等

但所有这些都可能被嗅探/反向工程。

一种可能的Overkill Way会使用某种不对称的私钥/公钥加密/签名。如RSA。您的应用程序将只包含公钥,并使用它签署请求数据。而你的服务器端将有一个秘密的私钥,它将使用它来检查客户端请求的有效性。

+0

私人公钥的事情是我所知道的最好的方式。问题是每个知道公钥的身体都可能无法下载数据。并且可以通过一些努力将密钥从应用程序中提取出来,但这显然不是不可能的。 – Janusz 2010-06-18 11:11:05

0

我对android知之甚少 - 但与问题无关。

如果您想阻止某人嗅探URL(以及身份验证详细信息?),那么唯一的选择是使用SSL。另一方面,如果你只是想阻止其他人访问URL,那么它只是一个认证问题。如果您不使用SSL,那意味着您需要使用会话和基于挑战的身份验证,以避免人们嗅探流量。您可以通过摘要身份验证或滚动自己的代码来完成此操作。

C.