2013-09-26 3 views
0

Я разрабатываю приложение для Android, которое делает запрос на мой веб-сервис, созданный на PHP. То, как я получаю данные из приложения Android, - это передать URL-адрес за кодом статически. Этот URL-адрес, находящийся в коде, не отображается пользователю. Есть ли вероятность, что мой URL будет показан пользователю и, возможно, позволит этому пользователю взломать мой веб-сервис?Защита веб-службы Android

Я пришел к решению здесь, в StackOverflow, где было упомянуто, что я должен использовать String Resource для сохранения моего URL статически. Но я также столкнулся с вопросом, который говорит, что ресурсы на Android могут быть открыты в Диспетчере файлов, если они коренится.

Если кто-нибудь может дать мне совет, чтобы начать на:

  1. Вызов функции внутри PHP через веб-сервис.

    функция getStudents общественных() {// Код для получения студенческой JSON }

    вызов функции, как http://mysite.com/getStudents()

  2. Скрыть URL для вызова веб-службы в Android.

+4

На каком-то уровне URL будет раскрыта, так что если это действительно что большая часть сделки, вы должны положить некоторую безопасность на свой веб-сервис ... –

+0

Как кто-то может «взломать» ваш веб-сервис, просто имея URL-адрес? – Supericy

+0

@Supericy Im не уверен, что честно, и Im в настоящее время думает, что это может быть возможность, если ваши URL-адреса и имена методов в веб-службе видны кому-то. Я мог бы пойти с предложением RSenApps. –

ответ

0

Если я вас правильно понял, вы хотите, чтобы пользователь (любого пользователя, который имеет приложение), чтобы увидеть некоторые данные в вашем приложении, но не быть в состоянии загрузить его непосредственно. Это означает, что в то же время вы хотите, чтобы пользователь имел доступ к данным и не имел доступа к данным, что, очевидно, невозможно. Контентная индустрия пыталась и терпела неудачу с бесчисленными схемами DRM. То, что вы можете делать (и что делает DRM), делает получение данных более раздражающим.

Пользователи могут получить URL-адрес, обнюхивая (перехватывая) трафик. Чтобы предотвратить это, вы должны использовать SSL и включить дополнительную проверку, чтобы ограничить SSL-сертификаты, которые будут разрешены. Это не позволит пользователю установить свой собственный ЦС на телефоне, а затем использовать инструменты MitM для получения URL-адреса.

Затем вам нужно скрыть URL/ключ/все, что вы используете, чтобы отличить приложение от злого пользователя с помощью браузера, насколько это возможно в приложении. Конечно, спрячьте его в коде и убедитесь, что используете ProGuard, чтобы сделать его более трудным для чтения.

Кроме того, используйте пользовательский агент, пользовательские заголовки HTTP и другие забавные вещи, проверьте его на стороне сервера, возвращая общее сообщение об ошибке, чтобы злоумышленник не знал, как вы узнали, что он не использует ваше приложение, и скрыть код, который добавляет их поверх вашего приложения. (Некоторые из этих вещей можно установить с помощью статических вызовов, так что вы можете скрыть его практически в любом месте.)

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(); 
       } 
      }); 
     } 
    } 
} 
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(); 
     } 
Смежные вопросы