安卓应用程序到服务器请求的安全性


Security of requests from android app to server

我有一个android应用程序和一个php服务器。我发送一些请求,比如登录和其他应用程序要求的请求参数;服务器发回json,json显示在应用程序中。

我的问题是,我如何阻止其他用户通过浏览器访问URL并获得结果?此外,大多数请求只应在用户登录时执行。这在应用程序中得到了处理,但在api中如何处理?我可以发送一个auth令牌,以便与其他请求一起发送,但也可以通过浏览器调用登录api,然后将该登录令牌与其他api一起发送。如何处理这些情况,并防止通过应用程序以外的方法访问数据?在安卓应用程序的情况下,我是否从应用程序发送加密的登录密码也有关系吗?还是应该在服务器上对它们进行加密,然后存储在数据库中?

这可能是一个非常天真的问题,但我在SO.p.S上找不到现有的问题。我知道php-apache服务器不是最好的选择,但客户有一个现有的php服务器,准备好了api,他想在应用程序中使用相同的api。

根据我编写JAVA REST API的经验,以下是我可以提出的一些建议,

1> 我的问题是如何防止其他用户通过浏览器访问URL并获得结果

ans:如果您希望API只响应应用程序发送的请求,您可以使用唯一密钥对请求进行签名,该密钥仅为应用程序所知,其他人不知道。

例如:您可以通过将发送的所有参数按特定顺序(如用户名+密码+参数1+参数2)附加来生成一个字符串,然后对该字符串应用SHA 256或任何哈希以生成一个唯一的字符串,并将该字符串作为授权头值发送:)

在API端,因为您知道要加入的参数的顺序,一旦您收到请求,使用您收到的参数重新生成字符串,并对字符串应用相同的哈希,检查您生成的字符串是否与请求的Authorization头值匹配,并仅响应一个具有正确Authorization值的字符串:)

工作原理:无论何时浏览器发出请求,都不知道Authorization标头,因此请求中不会出现此值,因此您的APU不会做出响应。另一方面,如果有人故意试图跟踪请求并意识到需要发送授权头,则仍然无法从API获得响应,因为他不知道用于生成值的算法或所使用的参数序列。

用例:所有Outh API都使用相同的模式。为了清晰起见,请阅读OAuth规范(尽管它们将ot用于不同的目的,但您可以使用它来适应您的情况:)API的示例:Facebook、Twitter、Google、Linked In等:)

2> 在安卓应用程序的情况下,我是否从应用程序发送加密的登录密码也有关系吗?

答案:无论你是使用安卓应用程序还是网络浏览器来请求都无关紧要:)如果你使用POST请求,所有参数都将默认加密:)所以不用担心:)

3> 它们应该在服务器上加密,然后存储在数据库中吗答案:在数据库中以纯文本形式保存密码可能会导致许多后果:)因此,在数据库中保存加密密码总是更好的:)就用户名而言,可以以纯文本方式保存:)

额外信息:确保您的所有api都使用安全通道:)我的意思是确保您的api是https:)希望我的建议能有所帮助:)