如何保护基于php的webservice

时间:2015-04-29 08:14:28

标签: php web-services security oauth https

我正在开发一个Android应用程序,我正在创建一个基于php的web服务来从数据库中检索信息。

问题是我真的不知道如何获得这项服务。

例如,如果我的Android应用程序需要从服务器检索一些信息,它将调用http://mywebservice.com/service.php,它将发送几个POST参数作为登录的用户和密码,或类似的东西,例如,一个用户ID来检索他的数据。

当然,任何具有足够知识的人都能够检索到这些数据。这就是我不想发生的事情。

任何知道要发送到我的服务器的参数的人都可以从中检索信息。

我如何确保这一点?

我一直在阅读关于OAuth,OAuth2,它的两条腿和三条腿实现,https ..

但此刻,我真的不知道如何确保这一点。

我希望网络服务只回答我的应用程序,而不是其他任何人。

PS:即使有http://myservice.com/get_information.php之类的内容你发送了一个id,你也可以检索到很多信息。当然,我控制在我的应用程序中,只有已登录和授权的人可以进行该调用,但无论如何这都是一个问题。做这种事的最好方法是什么?

3 个答案:

答案 0 :(得分:4)

保护网络服务的一些概念(可能会遗忘一些概念):

  • 协议:当前案例中的HTTPS,因此数据不会以清晰的格式传输。

  • 会话:会话具有生命周期,唯一标识符(会话令牌/ ID /无论如何)并包含错误代码。当用户调用您的Web服务时,将创建会话并回复其令牌。在每次调用webservice时,您将测试会话是否仍然存在。您可以添加复杂性到预期的输入,输出和交换。 error_code将用于记录(错误可能来自攻击或web服务的错误)。

  • 数据加密:使用password_hash()或crypt()等不对称函数进行身份验证问题。使用AES 128(10轮)或256(14轮)等对称算法来处理您需要检索的敏感数据。

  • 测试输入:如果您发现自己在查询中插入了给定的参数,请尝试prevent SQL injection。一些心胸狭窄的人也可以尝试发送会使您的网络服务失败的论据。

  • 寻求标准:正如Çagatay所说,尝试实施例如oAuth2,因为标准大部分时间比我们构建的要好得多:S

希望它有所帮助。

编辑:REST安全表也很好。

答案 1 :(得分:3)

我结束了使用OAuth。更具体地说这个库https://bshaffer.github.io/oauth2-server-php-docs/ 如果您按照说明操作,它非常易于使用且效果非常好。我认为这是开始使用OAuth的一种非常好的方式。

答案 2 :(得分:2)

  1. 始终使用SSL来防止一些中间人攻击。否则,嗅探连接的人(如果通过公共Wi-Fi或公司网络连接则存在巨大风险)可以看到用户名和密码。

  2. 不要在每个请求上发送用户名和密码,而是实现oAuth2,在这种情况下,您的客户端必须只发送一次用户名和密码,然后对于其他请求,您只需要发送auth键。实现oauth服务器的良好文档:http://www.sitepoint.com/creating-a-php-oauth-server/

  3. 请查看此文档:https://www.owasp.org/index.php/REST_Security_Cheat_Sheet