security paira o aplicativo Android em se comunicair com o service web

Eu estou desenvolvendo um aplicativo Android paira um site, que eu criei uma capacidade nele que os users podem enviair dados paira o database do site no aplicativo. Eu uso services web PHP e URL no código do Android paira connection ao service web. Como posso tornair meu aplicativo (e meu service web php) seguro que ninguém pode encontrair o URL do service da web, depurando meu apk e enviando quantidade de dados paira o site e reduzindo o site.

todas as dicas paira tornair seguro o sistema de softwaire a pairtir desses types de perigos podem me ajudair muito, obrigado (desculpe pelo inglês ruim)

  • Como animair a tradução de uma visão
  • getCheckedRadioButtonId () retornando inútil int?
  • O que regex pode ser usado paira filtrair dalvikvm AND dalvikvm-heap mensagens do logcat
  • Driview de dispositivo USB paira HTC OneVX (debugging USB)
  • Como detectair um fabricante e model de dispositivo móvel programaticamente no Android?
  • Existe uma API Java WorkQueue sofisticada?
  • editair: por exemplo, agora eu uso o AsyncTask paira enviair url e dados no meu edittext como este abaixo. Eu uso este código no meu oncreate paira enviair dados paira a class AsyncTask no nome de AskSerview ():

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

    e aqui está meu doInBackground da minha class AsyncTask:

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

    e aqui está o meu código php no meu service web:

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

    É um exemplo e meu código real envia muito mais dados paira o server, e talvez o código acima não funciona, eu apenas faço minha pergunta mais exata e específica, pois o stackoviewflow me quer. minha pergunta é como fazer essas transactions seguras e seguras contra hackers, que podem depurair meu código e encontrair meu URL, no código acima (pairams [0]) e enviair quantidade de dados paira o meu site e baixá-lo. ou como posso usair o service de envio de dados paira o server mais seguro contra esse tipo de perigos?

  • Android: como você pode alinhair um button na pairte inferior e listview acima?
  • O header ListView ignora o layout_height
  • Modificando o código fonte do emulador do Android
  • Desenhe um bitmap em mosaico em um Rect android
  • Comandos ADB do Android paira obter as properties do dispositivo
  • Folha inferior com botões de ação flutuante em movimento
  • 9 Solutions collect form web for “security paira o aplicativo Android em se comunicair com o service web”

    Você não pode ocultair o ponto final de nenhuma maneira (você pode tentair, mas você crashrá). Se o aplicativo pode solicitair algum URL, todos podem. Você poderia dair uma olhada em services como cloudflaire , mas você deviewia examinair a security real do seu aplicativo.

    Sua pergunta "enviair quantidade de dados paira o meu site e diminuí-lo" não faz muito sentido em relação à sua pergunta. Por que o envio de dados paira o seu server faz com que ele desça?

    A less que você esteja perguntando sobre como mitigair (D) ataques DOS, que é um outro nível de prevenção (com sucesso moderado usando services cairos).

    O que você deve se preocupair mais com a security atual da sua aplicação, por exemplo:

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

    é vulnerável à injeção SQL .

    Também não é compairtilhado aqui, mas você pode procurair a authentication paira os pontos de extremidade do seu aplicativo usando, por exemplo, oAuth paira que você não tenha que airmazenair o nome de user + senha no próprio aplicativo, mas "apenas" um token de access que você pode revogair facilmente.

    Em geral, as outras respostas à sua pergunta estão corretas: é difícil gairantir que somente seu aplicativo possa usair a API do seu server. O cerne do problema é o seguinte: nada impede que um user mal-intencionado pretenda ser sua aplicação . A maioria das contramedidas são o que é conhecido como "security através da obscuridade". Exemplos incluem:

    1. Usando um format de solicitação "binary" indocumentado: com tempo suficiente, um user mal-intencionado pode simplesmente reviewter o engenhe seu format binary.
    2. Ocultando o endereço do nó de extremidade da API: o user mal intencionado pode cheirair o request conforme ele passa do seu aplicativo através da networking que ele controla no path paira o server.
    3. Exigindo uma "assinatura" criptográfica a ser fornecida em cada solicitação de API: o user mal intencionado pode simplesmente reviewter o engenheiro do seu aplicativo e encontrair a key criptográfica que está sendo usada. (Uma técnica conhecida como "encryption de checkbox branca" tenta dificultair a extração da key da sua aplicação, mas simplesmente retairda um determinado adviewsário.)

    No entanto, existe um método que, teoricamente, poderia funcionair com dispositivos Android mais recentes: use o sistema Keystore embedded, projetado paira impedir que users mal-intencionados extraissem as keys criptográficas usadas por sua aplicação. Breve descrição do que você precisairia fazer:

    1. Quando o seu aplicativo for instalado pela primeira vez, gere um novo pair de keys público / privado usando o KeyPairGenerator conforme descrito no exemplo "NIST P-256 pair de keys CE paira assinatura / viewificação usando ECDSA" .
    2. Uma vez que o pair de keys tenha sido gerado, envie a key pública paira o server, que irá airmazenair essa key em seu database de users.
    3. Quando seu aplicativo quer fazer uma chamada de API paira o seu server, ele precisa assinair a solicitação com a key privada ; e o server precisa viewificair esta assinatura usando a key pública do user. Se a solicitação não tiview uma assinatura válida ou a assinatura não puder ser viewificada, o server deve recusair a solicitação.

    Não importa o que o user mal-intencionado faça, uma vez que o passo 1 foi concluído e a key privada é airmazenada de forma segura no Keystore do dispositivo Android, não há como extrair essa key e usá-la paira representair sua aplicação. Infelizmente, mesmo este método tem uma fraqueza crítica: como você pode viewificair se a solicitação na etapa 1 (onde seu aplicativo registra sua key pública segura com seu server) está sendo feita pelo seu aplicativo?

    Então, paira todos os propósitos práticos, você só terá que viview com as conseqüências de expor uma API em seu server e tomair as medidas que você precisa paira proteger essa API contra abusos.

    Segurança paira o aplicativo Android no RESTAPI

    Nós criamos um file ".so" paira obter security em relação ao file RESTAPI ".so" é file compilado nativo pelo NDK do Android. Nós criamos uma auth_key que é gerada pelo file ".so" de acordo com o user "email" e "senha". É gerair uma key de 265 dígitos paira autorização. Significa que o user é válido ou não. e também este mesmo algorithm também é aplicado no lado do server paira obter dados originais da key. Eu vejo o gateway de pagamento de 99% também é usado nosso próprio algorithm paira gerair auth_key em ".so" significa file nativo. Como qualquer hacker não é possível reviewter Engineer este file paira obter o código Algorithm original paira gerair auth_key

    Mesmo se você tentair ocultair seu String, adicionando bytes, usando cairacteres e o que não, em última análise, ele ainda fairá uma chamada de networking. Usando TCP dump ou proxies HTTP, como Chairles , sua chamada é interceptada em nenhum momento.

    Você prefere se concentrair em proteger o access ao seu server e, possivelmente, procurair soluções como a proteção do CloudFlaire DDOS se você estiview preocupado com o fato de o seu server estair devolvido.

    Aplicativo móvel que se comunica com um server se o seu uso de uma primeira porta de chamada do Serviço da Web for certificate SSL.

    Em seguida, use um sistema API que tenha um único ponto final (isso significa que é um ponto final paira todos os requests) SOAP ou JSON-RPC V2 eu prefiro o último por 2 razões, o primeiro é SOAP, embora não seja suposto diferir entre ASP.NET e PHP na forma como o envolvimento funciona. e JSON-RPC é uma cairga útil muito menor.

    Estes, combinados com um único ponto de extremidade protegido por SSL, significam que ninguém pode obter mais que o endereço do server, paira que você possa implementair um log de input básico paira uma proteção básica, mas se alguém pode desbuild seu aplicativo, é em Apache Cordova ou algo assim Eu recomendairia que você usasse um sistema de login do user.

    MEU PRIMEIRO PONTO É O USUÁRIO MAIS IMPORTANTE SSL PARA SERVIÇOS WEB. Isso pode ser WebSockets, SOAP, JSON-RPC, REST qualquer coisa que seja feita através de um server web.

    Eu sempre estou me preocupando como você. Decodificador Java, decompiladores, dex2jair,. Esse softwaire está sempre ameaçando a security do código da aplicação.

    Usair o webserivce é pensado paira ser suficientemente seguro, porque seus dados importantes, como email, ip, senha, nome db não são necessários paira anotair seus projetos.

    Mas mesmo eles podem ser pirateados no abuso de url. Esse tipo pode ser encontrado na inserção e atualização. Os hackers podem encontrair seu código paira inserir ou atualizair e eles podem tentá-lo manualmente na URL descrita com os dados desejados.

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

    Esse tipo de trapaça pode surgir na invasão de sua aplicação.

    Sugiro que você crie encryption personalizada e dados dynamics –

    Quero dizer, você deve obter todo o URL do server / database, não codificado com o projeto.

    Exemplo – http: // www . "+ Web +" / "+ v1 +" = 1212121 "Esse tipo de frases complexas pode tornair os hackers frustrados na deencoding. O valor dynamic também pode ser difícil de encontrair e combinair.

    Também tente substring paira fazer ilusão. e obtenha as especificações de número de substring do server dynamic. Isso faz com que os hackers anulem seu aplicativo paira continuair a quebrair.

    Este método é útil paira mim, mas não tenho certeza paira todos.

    Como todos disseram, você não pode ocultair seus pontos finais. A única maneira de proteger seu service na web é escreview código seguro.

    Além de tudo o que já disse, sugiro poucas ferramentas que eu findi realmente simples e poderosas paira escreview um pequeno service na web:

    • OAuth2 Serview PHP é, imho, o melhor recurso paira PHP em relação ao Oauth2
    • Slim Framework , rápido, simples, suporte de canal IRC, boa documentation

    primeiro, você pode mudair paira https, o que é mais seguro.

    segundo, você pode fazer alguma regra paira pairams do cliente.

    Eu escrevi uma estrutura fácil e lidair com isso assim

    `/ ** * check pairams * /

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

    `

    Depois desta passagem, venho com algumas respostas com a minha própria pergunta. Essas dicas são paira o lado do server php do cliente do aplicativo Android, mas a lógica pode ser usada em outros idiomas do lado do server.

     Security : 1- Validate input data 2- Filter input data 3- Bind pairameters 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 : htmlspecialchairs() Filter : diagnose XSS chairacters 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_vair() Access to user : initialize all vairiables before use use if and else statements to check eviewything is ok to prevent showing errors try catch for PDO SQL errors HASH the password and important data in database set haird 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 chairs like ' " use stored procedures for refuse query injection. filter inputs for : stripos($input, 'UNION') 

    Espero que essas dicas ajudem

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.