1

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

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

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

4

2 回答 2

0

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

你指的这个问题被称为Cross-site request forgery

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

如果您不能使用 HTTPS(无论是昂贵的还是任何其他问题):

你必须在你的 PHP 中验证通过 POST 或 GET 接收到的信息,这种语言有很大的能力解决这些“问题”;看看PHP 官方文档的这一部分

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

而且,如果您想获取访问者的 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;
}

最后,阅读本文

编辑

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

自签名 SSL 证书,免费。当然这有它的优点和缺点

于 2013-03-29T13:41:14.683 回答
0

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

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

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

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

于 2013-03-29T13:39:00.960 回答