Hvordan kode Android-programmer med sikkerhet i Mind

Android er en flott plattform, men som med alle plattformer, kan uforsiktig koding innføre sikkerhetsrisikoer i dine apps. Les videre for noen tips og beste praksis for å gjøre dine apps sikker og brukerne fornøyde.

En av de store måter som Android gir innebygd sikkerhet er ved å gi hver app sin egen sandkasse og sin egen uavhengige prosessen. De har begrenset interaksjon med OS, og ingen interaksjon med hverandre. Android gir inter-prosess kommunikasjonsmetoder og tillatelser system, både omtalt nedenfor; arbeide med disse i stedet for rundt dem, for å unngå å introdusere din helt egne sikkerhetshull.

Limit tillatelser

Hvis din app ønsker å gjøre visse ting (for eksempel bruke kameraet, eller få tilgang til ekstern lagring - mer om dette i et øyeblikk), krever Android deg eksplisitt å sette en tillatelse i AndroidManifest.xml fil. Der det er mulig, er det best å designe din app for å minimere antall tillatelser du trenger. Ikke bare er det bedre sikkerhet, men det gjør brukerne gladere (spør etter masse tillatelser kan føre til negative vurderinger).

Det er også mulig å opprette nye tillatelser som er spesifikke for din app, men det er best å unngå dette hvis du kan

Datalagring sikkerhet

Det er to grunnleggende alternativer for datalagring:. intern lagring eller ekstern lagring. Som standard, alt du skriver på intern lagringsplass er kun til programmet ditt. Du kan endre dette ved å eksplisitt endre modus til MODE_WORLD_READABLE eller MODE_WORLD_WRITABLE, men det reduserer automatisk appens sikkerhet så tenk nøye før du gjør dette.

Hvis du ønsker å dele data (lagre fotografier, for eksempel), du kan bruke ekstern lagring, som er globalt lese /skrivbar. Igjen, tenk nøye gjennom hva du lagrer eksternt. Aldri lagre sensitive data eller kjørbare data eksternt, og aldri legg sensitive eller kjørbare data fra ekstern lagring. Mens vi er i gang, aldri laste kjør data fra nettverket, enten

Bruk Innholdsleverandører -.
Forsiktig

Et tredje alternativ hvis du ønsker å dele data med andre applikasjoner er å bruke en innholdsleverandør. Disse gir strukturert lagring og klarte tilgang. Android selv har noen innholdsleverandører for å håndtere lyd, video, bilder og kontaktinformasjon. Du kan også være lurt å skrive din egen innholdsleverandøren hvis du trenger å kopiere /lime kompliserte data fra din app til andre apps. . Se Android Innholdsleverandør dokument for mer informasjon

For å unngå at andre programmer for å få tilgang til ContentProvider, sett den som android: eksportert = false i appens AndroidManifest.xml. Ellers satt denne verdien til true. Sjekk ut detaljene i de tilgjengelige manifest tillatelsene nøye hvis du tillater tilgang, og at bare den tilgangen du definitivt trenger akkurat nå. Det er enklere å legge til flere tillatelser senere enn det er å ta litt unna. Hvis det er bare en av dine egne apps som trenger tilgang, kan du angi beskyttelsesnivå til "signatur". Dette betyr at enhver app utgitt med samme signatur (yours!) Har tilgang, men andre apps ikke. Dette skjer automatisk, som ikke krever bruker godkjenning, gir så en jevnere brukeropplevelse.

Når du bruker innholdsleverandører (eller SQL databaser mer generelt), må du være forsiktig for å unngå skadelig SQL-injeksjon. Bruk Android-gitt spørring (), oppdatere (), og slett () metoder i stedet for å skrive din egen SQL. Men hvis du bygger forespørsler fra bruker levert data, vil du fortsatt trenger å være nøye med å sjekke at før du gjør noe med det, eller din bruker tilgjengelig data kan være et forsøk på ondsinnet SQL-injeksjon. Anmeldelser
Sikker nettverk

Hvis du ønsker å dele informasjon mellom programmer, kan det være fristende å rulle din egen måte å kommunisere på, ved hjelp av nettverkskontakter eller andre Linux tradisjonelle metoder. Dette reiser sikkerhetsspørsmål. I stedet bruker Android IPC (inter-prosess kommunikasjon) metoder: hensikt, Binder, Messenger, BroadcastReceiver, og så videre. Men gjør også oppmerksom på at disse etter sin art er offentlige. Hvis du håndterer data fra en av disse (eller fra andre offentlige API), må du sjekke det før bare bruker det i programmet ditt, for å unngå en ondsinnet applikasjon som utgir seg for noe du forventer og bestått skadelige data i app.

Hvis du ønsker å utføre en forsinket virkning andre steder i systemet, se inn hjelp PendingIntent. PendingIntent er en "token" som sendes til og fra app A til app B, slik app B til å utføre en handling på vegne av app En gang i fremtiden. PendingIntent krever en bestemt kontekst som skal gis (som bør være som i basen din app, app A), og vil bli utført kun med tillatelsene til den konteksten.

Til slutt bruker HTTPS i stedet for HTTP der det er mulig, og sikkert for eventuelle sensitive data - husk at mobile enheter er ofte brukt på usikre WiFi-nettverk. Og ikke bruke SMS-tjenester (som er iboende usikre) til å overføre sensitive data, eller faktisk noen data i det hele tatt med mindre SMS integrering er en bevisst funksjon i programmet ditt.

Vær forsiktig når du bruker WebView
< p> En WebView tillater en app for å vise en webside uten å sende brukeren til en komplett mobil nettleser som Chrome. Som standard, Javascript og Plugins er deaktivert. Det er mulig å slå dem på, men bare gjøre dette hvis du absolutt må, som de er en sikkerhetsrisiko. Hvis du slår JS på, bruke HTTPS hvis du kan. Du bør også deaktivere lokale filtilgang, for å begrense skaden som ethvert angrep kunne gjøre

Hvis du trenger å slå på noen av de ovennevnte alternativene, vurdere å opprette en WebViewClient underklasse, og altoverskyggende shouldOverrideUrlLoading og shouldInterceptRequest, for å avskjære og inspisere eventuelle URL ressursforespørsler fra innen en WebView. (Du kan for eksempel bestå slike forespørsler om til en full mobilnettleser,. Slik app ville vise brukeren en enkelt side, men sende noen flere klikk til en nettleser) Se dette nyttig ressurs, Adventures med Android WebViews, for mer informasjon om WebViews og sikkerhet.

Kontroller data input

Som nevnt ovenfor, hvis du legger i innspill fra noen offentlig API (BroadcastReceiver, aktivitet, noe ContentProvider), sjekk den i app før du gjør noe med det. Skadelige apper kan gi falske data som er ment for å få tilgang til appen din interne arbeid. Sanity-sjekking er også bra for å unngå uventede feil, så det er verdt all round.

Kryptografi

Hvis du vil kryptere data for å øke sikkerheten, gå rett fram. Men ikke bruk din egen hjemme-valset kryptering; bruke en av de eksisterende bibliotekene som fungerer på Android, som implementeringer i javax.crypto.Cipher. De har hatt flere øyeepler enn dem og er i utbredt bruk, så det er en høyere sannsynlighet for eventuelle feil som blir oppdaget. Når du genererer en nøkkel, bruke en sikker tilfeldig tallsystem som SecureRandom. Det finnes mer informasjon om riktig bruk av SecureRandom og andre kryptografi spørsmål i dette innlegget.

Noen enkle trinn og en grunnleggende forståelse av sikkerhet kan betydelig redusere sjansene for et sikkerhetsproblem med programmet ditt. Men hvis du arbeider med veldig sensitive data, bør du sørge for at du undersøker faget fullt og teste nøye før du slipper din app i naturen.



Previous:
Next Page: