0

我正在开发一个 Android 应用程序,它向我用 PHP 制作的 Web 服务发出请求。我从 Android 应用程序获取数据的方式是在代码后面静态传递一个 URL。用户看不到代码中的此 URL。是否有可能将我的 URL 泄露给用户并可能允许该用户侵入我的网络服务?

我在 StackOverflow 找到了一个解决方案,其中提到我应该使用字符串资源来静态保存我的 URL。但是我在这里也遇到了一个问题,说如果 root 可以在文件管理器中打开 Android 上的资源。

如果有人可以给我一个提示开始:

  1. 通过 Web 服务调用 PHP 内部的函数。

    public function getStudents() { //获取学生 JSON 的代码 }

    调用函数,如http://mysite.com/getStudents()

  2. 隐藏在 Android 中调用 Web 服务的 URL。

4

3 回答 3

0

如果我理解正确,您希望用户(任何拥有该应用程序的用户)在您的应用程序中看到一些数据,但不能直接下载。这意味着同时,您希望用户可以访问数据而不能访问数据,这显然是不可能的。内容行业已经尝试过无数的 DRM 方案,但都失败了。您能做的(以及 DRM 所做的)是让数据变得更烦人。

用户可以通过嗅探(拦截)流量来获取 URL。为了防止这种情况,您应该使用 SSL,并包括一个额外的检查来限制将被允许的 SSL 证书。这将阻止用户在手机上安装自己的 CA,然后使用 MitM 工具获取 URL。

然后,您需要隐藏 URL/密钥/任何您用来将应用程序与恶意用户区分开来的内容,并在应用程序中尽可能深入地使用浏览器。当然将其隐藏在代码中,并确保使用 ProGuard 使其更难阅读。

此外,使用自定义用户代理、自定义 HTTP 标头和其他有趣的东西,检查它在服务器端返回一个通用错误消息,这样攻击者就不会知道你是如何发现他没有使用你的应用程序的,并隐藏代码在您的应用程序中添加这些。(其中一些内容可以使用静态调用进行设置,因此您几乎可以将其隐藏在任何地方。)

于 2013-09-28T05:26:32.483 回答
0

ASP.net

 public string xLxS(string TABLENAME, string COLUMNS, string WHERECRTR, string TOP, string COLUMN)
        {
            string sonuc = "";
            DT = dataclass.SELECTSQL(TABLENAME, COLUMNS,TOP, WHERECRTR, "");
            if (DT.Rows.Count == 1)
            {
                if (COLUMN != "")
                {
                    sonuc = DataTableToJsonObj(DT,TABLENAME);
                }
                else
                {
                    sonuc = DT.Rows[0][COLUMN].ToString();
                }
            }
            else if(DT.Rows.Count > 1) 
            {
                sonuc = DataTableToJsonObj(DT,TABLENAME);
            }
            return sonuc.ToString();
        }
于 2016-09-07T10:46:43.680 回答
0
public class WebServis extends AppCompatActivity {
    ProgressDialog pDialog;
    // Web Servisimizdeki Namspace alanı
    private final String _Namspace      =   "http://tempuri.org/";
    // Web Servimizdeki Method ismi
    private final String _MethodName    =   "methodname";
    // Namspace ile Method isminin birleşimi
    private final String _Action        =   "http://tempuri.org/"+_MethodName;
    // Web Servisimizin Adresi
    private final String _Url           =   "http://"ip&or&domain"/WebService/Service.asmx";
    private String _ResultValue         =   "";
    Context context;
    EditText _birinci_sayi,_ikinci_sayi;
    String a,b;
    String TAG = "Response";
    String resultString;
    Object object=null;
    //priv JSONArrayAdapter getListView;
    private  ListView lv;
    ArrayList contactList;
    Button _btn_topla;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_servis);
        // Topla butonumuzu tanımlıyoruz.
        _btn_topla=(Button)findViewById(R.id.button);
        // Yukarıda tanımladığımız _btn_topla butonuna tıklama olayını tanımlıyoruz.
        lv= (ListView)findViewById(R.id.listView);
        _btn_topla.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Hazırladığımız AsyncTask'ımızı çalıştırıyoruz..

                AsyncCallWS task = new AsyncCallWS();
                task.execute();
            }
        });
    }
    // Arkaplanda webservis işlemlerimizi yaptığımız yer.
    // AsyncTask sınıfımızdan _WebServiceAsyncTask türetiyoruz..
    private class AsyncCallWS extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            Log.i(TAG, "onPreExecute");
        }
        @Override
        protected Void doInBackground(Void... params) {
            Log.i(TAG, "doInBackground");
            calculate();
            HashMap<String, String> contact = new HashMap<>();
            showData(resultString);
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            Log.i(TAG, "onPostExecute"+ resultString);
            Log.i(TAG, "Step 9");
            try {
                ListAdapter adapter = new SimpleAdapter(
                        WebServis.this, contactList,
                        R.layout.list_order, new String[]{"name", "email",
                        "adres"}, new int[]{R.id.Name,
                        R.id.Email, R.id.Adres});
                Log.i(TAG, "Step 10");
                lv.setAdapter(adapter);
                Log.i(TAG, "Step 11");
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(),"Hata" + e.toString(),Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }

    public void calculate() {
        String SOAP_ACTION = _Action;
        String METHOD_NAME = _MethodName;
        String NAMESPACE = _Namspace;
        String URL = _Url;
        try {
            //PropertyInfo propertyInfo=new PropertyInfo();
            SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
            Request.addProperty("TABLENAME","USER_TBL");
            Request.addProperty("COLUMNS","USERID,NAME,PASS,EPOSTA,ADRESS");
            Request.addProperty("WHERECRTR","");
            Request.addProperty("TOP","");
            Request.addProperty("COLUMN","");
            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            soapEnvelope.dotNet = true;
            //soapEnvelope.headerOut = security; // this is an Element[] created before
            soapEnvelope.setOutputSoapObject(Request);
            HttpTransportSE transport = new HttpTransportSE(URL);
            transport.debug=true;
            transport.call(SOAP_ACTION, soapEnvelope);
            SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
            //resultString1 = (SoapPrimitive) soapEnvelope.getResponse();

            resultString =response.toString();
            Log.i(TAG, "Result Celsius: " + resultString);
        } catch (Exception ex) {
           // Log.e(TAG, "Error: " + ex.getMessage());
        }
    }
    private void showData(String json) {
        String jsonStr = json;
        Log.e(TAG, "Response from json: " + jsonStr);
        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);
                // Getting JSON Array node
                JSONArray contacts = jsonObj.getJSONArray("USER_TBL");
                // looping through All Contacts
                contactList = new ArrayList<HashMap<String, String>>();
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);
                    String id = c.getString("USERID");
                    String name = c.getString("NAME");
                    String email = c.getString("EPOSTA");
                    String address = c.getString("ADRESS");
                    String pass = c.getString("PASS");
                    HashMap<String, String> contact = new HashMap<String, String>();
                    contact.put("id", id);
                    contact.put("name", name);
                    contact.put("email", email);
                    contact.put("adres", address);
                    contact.put("pass", pass);
                    //contact.put("mobile", mobile);
                    // adding contact to contact list
                     contactList.add(contact);
                }
            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Json parsing error: " + e.getMessage(),
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }
        } else {
            Log.e(TAG, "Couldn't get json from server.");
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Couldn't get json from server. Check LogCat for possible errors!",
                            Toast.LENGTH_LONG)
                            .show();
                }
            });
        }
    }
}
于 2016-09-07T10:43:02.840 回答