如何验证Web服务调用是否来自android应用程序

时间:2017-11-14 06:41:10

标签: php android api web-services security

我有一个带有php web服务的android应用程序。 Web服务URL存储在应用程序本身中。我的应用程序中有一个注册页面,用于将数据发布到注册URL。

我的注册代码是:

           `String link = "http://xxxxxxx.registration.php";
            String data = URLEncoder.encode("name", "UTF-8") + "=" +
                    URLEncoder.encode(name, "UTF-8");
            data += "&" + URLEncoder.encode("phone", "UTF-8") + "=" +
                    URLEncoder.encode(phone, "UTF-8");
            data += "&" + URLEncoder.encode("password", "UTF-8") + "=" +
                    URLEncoder.encode(password, "UTF-8"); 

            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(data);
            wr.flush();`

在我将apk发布到Playstore之后,有人对apk文件进行了逆向工程,并将带有帖子数据的批量请求发送到我的注册网址。

在这次袭击发生时我没有使用过Proguard。

minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro

我尝试通过将URL保存在gradle.properties文件上并通过BuildConfig.Registration_Url调用它来保护URL。通过引用this。但不知怎的,他们又找到了网址。

经过一番搜索后,我发现没有办法可以将100%的网址隐藏在攻击者手中

  1. 我想知道从攻击者那里获取代码的正确方法是什么。
  2. 如何验证Web服务请求是否来自应用程序(如果调用不是来自应用程序,则应重定向到错误页面)
  3. 我可以将所有网络服务网址保留在服务器端吗?
  4. 我是编程的初学者。请帮助!

1 个答案:

答案 0 :(得分:0)

使用$_SERVER['HTTP_USER_AGENT']中的用户代理, 对于简单检测,您可以使用此SCRIPT

<?php

//Detect special conditions devices
$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
$webOS   = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");

//do something with this information
if( $iPod || $iPhone ){
    //browser reported as an iPhone/iPod touch -- do something here
}else if($iPad){
    //browser reported as an iPad -- do something here
}else if($Android){
    //browser reported as an Android device -- do something here
}else if($webOS){
    //browser reported as a webOS device -- do something here
}

?> 

如果您想了解用户设备的更多详细信息,建议您使用以下解决方案之一:http://51degrees.mobihttp://deviceatlas.com

相关问题