Seguridad para la aplicación android para comunicarse con webservice

Estoy desarrollando una aplicación para Android para un sitio, que he hecho una capacidad en que los usuarios pueden enviar datos a la base de datos del sitio en la aplicación. Utilizo servicios web PHP y URL en código android para conectarse al servicio web. ¿Cómo puedo hacer que mi aplicación (y mi servicio web php) asegure que nadie puede encontrar el url de servicio web depurando mi apk y enviar cantidad de datos al sitio y hacer que el sitio.

Cualquier consejo para hacer el sistema de software seguro de este tipo de peligros puede ayudarme mucho, gracias (lo siento por mal inglés)

Editar: por ejemplo, ahora uso AsyncTask para enviar url y datos en mi edittext como este a continuación. Utilizo este código en mi oncreate para enviar datos a la clase AsyncTask en el nombre de AskServer ():

link = "http://mywebservice-adrress/name.php"; new AskServer().execute(link, edttext.getText().toString()); 

Y aquí está mi doInBackground de mi clase AsyncTask:

 @Override protected Object doInBackground(String... params) { BufferedReader buf = null; try { URL link = new URL(params[0]); URLConnection connect = link.openConnection(); connect.setDoOutput(true); OutputStreamWriter osw = new OutputStreamWriter(connect.getOutputStream()); String data = URLEncoder.encode("field","UTF8") +"="+ URLEncoder.encode(params[1], "UTF8"); sw.write(data); osw.flush(); } catch (Exception e) {e.printStackTrace();} return null; }// end doInbackground() 

Y aquí está mi código php en mi servicio web:

 <?php include 'config.php'; $field=$_POST['field']; mysql_query("insert into `wp_comments` (`comment_content`) values('$field')"); ?> 

Es un ejemplo y mi código real envía mucho más datos al servidor, y tal vez el código anterior no funciona, solo hago que mi pregunta sea más exacta y específica, ya que stackoverflow me quiere. Mi pregunta es cómo hacer estas transacciones seguras y seguras de los hackers que pueden depurar mi código y encontrar mi url, en el código de arriba (params [0]) y enviar cantidad de datos a mi sitio y hacerlo abajo. O cómo puedo utilizar el servicio de envío de datos al servidor más seguro de este tipo de peligros ??

No puede ocultar el punto final de ninguna manera (puede probar, pero fallará). Si la aplicación puede solicitar alguna URL que todos puedan. Usted podría echar un vistazo a los servicios como cloudflare , pero usted debe mirar en la seguridad real de su aplicación en su lugar.

Su pregunta "enviar cantidad de datos a mi sitio y hacerlo abajo" no tiene mucho sentido en relación con su pregunta. ¿Por qué el envío de datos a su servidor lo haría bajar?

A menos que usted está preguntando acerca de cómo mitigar (D) los ataques de DOS que es un nivel de prevención de todo otro (con éxito moderado utilizando servicios caros).

Lo que debe preocuparse más es la seguridad real de su aplicación, por ejemplo:

 $field=$_POST['field']; mysql_query("insert into `wp_comments` (`comment_content`) values('$field')"); 

Es vulnerable a la inyección de SQL .

También no se comparte aquí, pero se puede buscar la autenticación de los puntos finales de su aplicación mediante, por ejemplo, oAuth para que no tenga que almacenar nombre de usuario + contraseña en la aplicación en sí, sino "sólo" un token de acceso que puede revocar fácilmente.

En general, las otras respuestas a su pregunta son correctas: es difícil garantizar que sólo su aplicación puede hacer uso de la API de su servidor. El quid del problema es el siguiente: nada impide que un usuario malintencionado pretenda ser su aplicación . La mayoría de las contramedidas son lo que se conoce como "seguridad a través de la oscuridad". Ejemplos incluyen:

  1. Uso de un formato de solicitud "binario" indocumentado: con suficiente tiempo, un usuario malintencionado puede simplemente invertir su formato binario.
  2. Ocultar la dirección del punto final API: el usuario malintencionado puede olfatear la solicitud a medida que pasa desde su aplicación a través de la red que controla en su camino hacia su servidor.
  3. Requerir una "firma" criptográfica que se proporcionará en cada solicitud de API: el usuario malintencionado sólo puede invertir la ingeniería de su aplicación y encontrar la clave criptográfica que se está utilizando. (Una técnica conocida como "criptografía de caja blanca" intenta hacer que sea difícil extraer la clave de su aplicación, pero simplemente frena a un adversario determinado).

Sin embargo, hay un método que podría funcionar teóricamente con los nuevos dispositivos Android: utilice el sistema Keystore incorporado , diseñado para evitar que los usuarios malintencionados extraigan las claves criptográficas utilizadas por la aplicación. Breve descripción de lo que necesitaría hacer:

  1. Cuando se instale por primera vez la aplicación, genere un nuevo par de claves público / privado utilizando KeyPairGenerator como se describe en el ejemplo "Par de claves NIST P-256 EC para la firma / verificación utilizando ECDSA" .
  2. Una vez que se genera el par de claves, envíe la clave pública a su servidor, que almacenará esta clave en su base de datos de usuarios.
  3. Cuando su aplicación desea hacer una llamada de API a su servidor, necesita firmar la solicitud con la clave privada ; Y el servidor necesita verificar esta firma utilizando la clave pública del usuario. Si la solicitud no tiene una firma válida o la firma no se puede verificar, su servidor debe rechazar la solicitud.

No importa lo que haga el usuario malintencionado, una vez que se haya completado el paso # 1 y la clave privada esté almacenada de forma segura en el Keystore del dispositivo Android, no hay forma de extraer esa clave y usarla para suplantar su aplicación. Desafortunadamente, incluso este método tiene una debilidad crítica: ¿cómo puede verificar que la solicitud en el paso # 1 (donde su aplicación registra su clave pública segura con su servidor) está siendo realizada por su aplicación?

Así que para todos los propósitos prácticos, sólo tendrás que vivir con las consecuencias de exponer una API en tu servidor y tomar las medidas que necesites para proteger esa API del abuso.

Seguridad para la aplicación Android en RESTAPI

Hemos diseñado un archivo ".so" para la seguridad con respecto a RESTAPI ".so" archivo es un archivo compilado nativo por android NDK. Hemos diseñado una auth_key que se genera mediante el archivo ".so" según el usuario "email" y "password". Se genera clave de 265 dígitos para la autorización. Significa que el usuario es válido o no. Y también este mismo algoritmo también se aplican en el lado del servidor para obtener datos originales de la clave. Tengo ver 99% de la pasarela de pago también se utiliza nuestro propio algoritmo para la generación de auth_key en ".so" significa archivo nativo. Porque cualquier hacker cann't posible invertir ingeniero este archivo para obtener el algoritmo original código para generar auth_key

Incluso si intenta ocultar su String añadiendo bytes, usando caracteres y lo que no, en última instancia, seguirá realizando una llamada de red. Utilizando TCP dump o proxies HTTP como Charles , su llamada es interceptada en ningún momento.

Usted tiene que centrarse en proteger el acceso a su servidor y mirar posiblemente en soluciones tales como protección de DDOS de CloudFlare si usted está preocupado que su servidor será ddossed.

Mobile Application que se comunica con un servidor si el uso de un primer servicio Web es el certificado SSL.

A continuación, utilizar un sistema API que tiene un único punto final (esto significa que es un punto final para todas las solicitudes) SOAP o JSON-RPC V2 prefiero este último por 2 razones el primero es SOAP aunque no se supone que difiere entre ASP.NET y PHP en la forma en que funciona la envolvente. Y JSON-RPC es una carga útil mucho más pequeña.

Estos combinados con un punto de acceso único protegido por SSL significa que nadie puede obtener más que la dirección del servidor, por lo que podría implementar un inicio de sesión básica para una protección básica, pero si alguien puede desconstruir su aplicación EG es en Apache Córdoba o algo Yo recomendaría que utilice un sistema de inicio de sesión de usuario.

MI PRIMER PUNTO ES EL USO MÁS IMPORTANTE SSL PARA LOS SERVICIOS WEB. Esto puede ser WebSockets, SOAP, JSON-RPC, REST cualquier cosa que va a través de un servidor web.

Siempre me preocupo como tú. Decodificador de Java, descompiladores, dex2jar,. Tal software siempre amenaza la seguridad del código de la aplicación.

El uso de webserivce se piensa para ser bastante seguro bastante, porque sus datos importantes, tales como email, IP, contraseña, nombre del DB no son necesarios anotar en sus proyectos.

Pero incluso ellos pueden ser hackeados en el abuso de url. Tal tipo se puede encontrar en insertar y actualizar. Los hackers pueden encontrar su código para insertar o actualizar y pueden probarlo manualmente en la url descrita con sus datos deseados.

Ejemplo – http://www.myweb.com/update?name= "hacker" & value = "1111111111"

Este tipo de trucos pueden surgir al hackear su aplicación.

Le sugiero que cree cifrado personalizado y datos dinámicos –

Quiero decir, Debería obtener toda la url del servidor / base de datos, no codificada con el proyecto.

Ejemplo – http: // www . "+ Web +" / "+ v1 +" = 1212121 "Este tipo de frases complejas pueden hacer que los piratas informáticos se sientan frustrados al decodificar el valor dinámico también puede ser difícil de encontrar y combinar.

También intente substring para hacer ilusión. Y obtener las especificaciones de número de subcadenas del servidor dinámico. Que causan que los piratas informáticos anulen su aplicación para seguir agrietándose.

Este método es útil para mí, pero no estoy seguro para todos.

Como todos dijeron, no puedes ocultar tus puntos finales. La única manera de asegurar su servicio web es escribir código seguro.

Además de todo lo que ya se ha dicho, sugeriría algunas herramientas que encontré muy simple pero potente para escribir un pequeño servicio web:

  • OAuth2 Server PHP es, imho, el mejor recurso para PHP con respecto a Oauth2
  • Slim Framework , rápido, sencillo, soporte de canales IRC, buena documentación

En primer lugar, puede cambiar a https, que es más seguro.

Seg, puedes hacer alguna regla para los parámetros del cliente.

Escribí un marco fácil y trato con él como este

`/ ** * comprobar parámetros * /

 private static function checkParams($params){ $data = $params['data']; $str = MD5_PREFIX; foreach($data as $k=>$v){ $str.=$k.$v; } if(md5($str) != $params['sign']){ throw new Exception("err sign",SIGN_NOT_CORRECT); } } 

Después de pasar este tiempo voy con algunas respuestas con mi propia pregunta. Estas extremidades son para el lado del servidor del php del cliente androide de la aplicación, pero la lógica puede utilizar en otros idiomas del lado del servidor.

 Security : 1- Validate input data 2- Filter input data 3- Bind parameters to refuse query injection 4- Give least access to user 5- Refuse Leakage info by disableing log and httpd.conf 6- Output Escaping : escape html in output for sites and useless for webservices Functions like : htmlspecialchars() Filter : diagnose XSS characters and filter them Validate : check if input data is like the data type we expect Filter functions : strip_tags() str_replace() preg_replace() Force Change DataType by placeing datatype before them : $input = (int) $input; Validat functions : stripos() preg_match() "ctype" functions like : ctype_alnum(text), ctype_alpha(text), ctype_digit(text) : if input is ctype validate type return true else return false isset() filter_var() Access to user : initialize all variables before use use if and else statements to check everything is ok to prevent showing errors try catch for PDO SQL errors HASH the password and important data in database set hard names for database tables and columns make index.php in the folder and use this code : <?php header('location',HOME_URL); exit; ?> in .htdocs paste this code : Options -Indexes Database security : $mysqli->real_escape_string($input); // for scape chars like ' " use stored procedures for refuse query injection. filter inputs for : stripos($input, 'UNION') 

Espero que estos consejos ayuden

  • Enviar mensajes FCM del lado del servidor al dispositivo Android
  • Android en la facturación de aplicaciones v3 con php
  • Configurar una base de datos de servidor en línea y codificar mi aplicación nativa de Android para interactuar con ella
  • Cómo hacer que Android y Arduino se comuniquen sin un módulo inalámbrico
  • Captura de imágenes a través de la cámara Android desde el navegador mediante PHP
  • Crear API para ser consumido por Website y Mobile
  • Clics no funciona en WebView
  • Md5 con Android y PHP
  • Cómo rastrear / depurar este error SOAP => parece que no tenemos ningún documento XML
  • Cómo enviar una notificación desde el servidor PHP a la aplicación Android
  • imap_fetchbody - Error de cuerpo codificado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.