【问题标题】:Android App and PHP Web Service SecurityAndroid 应用和 PHP Web 服务安全
【发布时间】:2013-03-20 05:00:09
【问题描述】:

我正在构建一个使用 PHP Web 服务的 android 应用程序(我也在构建它)。

我的问题是,如何防止未经授权的用户使用我的网络服务?例如,是否有人可以获取我的 Web 服务的地址并在我的应用程序之外使用它(例如,将发布变量发送到我的服务)?

另一个相关问题是如何防止我的网络服务上的垃圾邮件请求?会不会是记录IP地址并限制调用量的情况?

【问题讨论】:

    标签: java php android web-services


    【解决方案1】:

    您可以在 Android 设备和您的网络服务 API 端点之间使用HTTPS 连接。

    限制您的网络服务,使其仅接受HTTPS 连接。您可以使用 Apache(可能使用 SSLRequireSSL directive)或直接在您的 PHP 连接处理程序中轻松完成此操作。

    在使用 HTTPS 传输流时,您可以在对 Web 服务进行 API 调用时传递特定参数,以确保请求已从您的应用程序发送。没有人能够知道传输了哪些具体数据,也无法重现与您的远程服务的可接受连接。

    关于您的第二个问题,您确实可以限制给定时间内的请求数量。使用 PHP 或使用特定工具,例如 fail2ban

    【讨论】:

      【解决方案2】:

      PHP 可以通过 POST 或 GET 从您的站点甚至 Internet 浏览器接收数据。用于执行此操作的方法之一是 curl

      你指的是什么?这个问题被称为Cross-site request forgery

      如果可以的话,你应该在你的应用中实现HTTPS的使用,这样可以解决很多安全问题。

      万一你不能使用HTTPS(不管是贵还是其他问题):

      你必须在你的PHP中验证POST或GET收到的信息,这种语言有很大的能力解决这些“问题”;看看PHP官方documentation的这个part

      假设您正在构建一个登录系统: 您还可以在登录页面中添加一个隐藏元素,其中包含只能发生一次的唯一密码,将此密码保存在会话中,因此,登录脚本会在会话中查找此代码,与发布到脚本的内容进行比较,应该继续。

      而且,如果您想获取访问者的 IP 地址:

      function getRealIpAddr()
      {
          if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
          {
            $ip=$_SERVER['HTTP_CLIENT_IP'];
          }
          elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
          {
            $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
          }
          else
          {
            $ip=$_SERVER['REMOTE_ADDR'];
          }
          return $ip;
      }
      

      最后,阅读this

      编辑

      如果您无法支付 HTTPS 证书,(如Halim Qarroum 所说),您可以使用:

      Self signed SSL certificates, 哪些是免费的。 当然这有它的优点和缺点

      【讨论】:

      • 如果他不使用安全的HTTPS 连接,则任何机构都可能通过不同类型的攻击来读取明文传递的数据。如果攻击者可以读取发送到他的 API 的数据,他就可以重现截获的请求,使 web 服务认为他是实际的 Android 应用程序。
      • 他没有问如何防止这种攻击,只是说使用HTTPS可以解决你刚才提到的许多安全问题。如果他不能支付https连接,他可以做我提到的,如果他能支付,那将解决很多问题。
      • HTTPS 不是成本问题。第三方签名证书可能很昂贵,但在这种情况下,没有什么能阻止您使用自签名证书。此外,他确实询问了如何防止未经授权访问他的服务:My question is, how do I prevent unauthorised users using my webservice?
      • 我提出了这样一个问题:“如何防止未经授权的用户影响我的系统通过 POST 或 GET 发送数据?”在许多国家/地区拥有 HTTPS 可能会很昂贵,例如我居住的阿根廷。可能他没钱付,只是想让你的APP尽可能的安全,那么,如果他能付钱实施就好了,否则,如果他不能付钱,那我建议阅读这些官方文档和使她的系统更强大的链接。
      • 正如我所说,他也可以使用自签名 SSL 证书:en.wikipedia.org/wiki/Self-signed_certificate。哪些是免费的。当然,这有它的优点和缺点。
      猜你喜欢
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多