mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['mobile-pentesting/android-app-pentesting/android-applicatio
This commit is contained in:
parent
f3b904a3d4
commit
11ee49c34a
1 changed files with 28 additions and 28 deletions
|
@ -28,17 +28,17 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
||||||
|
|
||||||
### UID Sharing
|
### UID Sharing
|
||||||
|
|
||||||
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van albei toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadsaam** word.\
|
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van beide toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadpleeg** word.\
|
||||||
**Om dieselfde UID te deel, moet toepassings dieselfde `android:sharedUserId` waarde in hul manifes definieer.**
|
**Om dieselfde UID te deel, moet toepassings dieselfde `android:sharedUserId` waarde in hul manifes definieer.**
|
||||||
|
|
||||||
### Sandboxing
|
### Sandboxing
|
||||||
|
|
||||||
Die **Android Toepassing Sandbox** laat toe om **elke toepassing** as 'n **afsonderlike proses onder 'n afsonderlike gebruikers-ID** te laat loop. Elke proses het sy eie virtuele masjien, sodat 'n app se kode in isolasie van ander apps loop.\
|
Die **Android Toepassing Sandbox** laat toe om **elke toepassing** as 'n **afsonderlike proses onder 'n afsonderlike gebruikers-ID** te laat loop. Elke proses het sy eie virtuele masjien, sodat 'n app se kode in isolasie van ander apps loop.\
|
||||||
Vanaf Android 5.0(L) word **SELinux** afgedwing. Basies het SELinux alle prosesinteraksies ontken en toe beleide geskep om **slegs die verwagte interaksies tussen hulle toe te laat**.
|
Vanaf Android 5.0(L) **SELinux** word afgedwing. Basies het SELinux alle prosesinteraksies ontken en toe beleide geskep om **slegs die verwagte interaksies tussen hulle toe te laat**.
|
||||||
|
|
||||||
### Permissions
|
### Permissions
|
||||||
|
|
||||||
Wanneer jy 'n **app installeer en dit vra vir toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **name** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een gespesifiseer.\
|
Wanneer jy 'n **app installeer en dit vra vir toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\
|
||||||
Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies om toestemmings vra** maar al die toestemmings moet **verklaar** word in die **manifest.**
|
Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies om toestemmings vra** maar al die toestemmings moet **verklaar** word in die **manifest.**
|
||||||
|
|
||||||
Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs apps wat 'n gespesifiseerde toestemming het**.\
|
Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs apps wat 'n gespesifiseerde toestemming het**.\
|
||||||
|
@ -54,7 +54,7 @@ Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs
|
||||||
|
|
||||||
## Pre-Installed Applications
|
## Pre-Installed Applications
|
||||||
|
|
||||||
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** directories gevind en sommige van hulle is **geoptimaliseer** (jy mag nie eens die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
|
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** gidsen gevind en sommige van hulle is **geoptimaliseer** (jy mag nie eens die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
|
||||||
|
|
||||||
* Diegene wat saam met die **AOSP** (Android OpenSource Project) **ROM** verskaf word
|
* Diegene wat saam met die **AOSP** (Android OpenSource Project) **ROM** verskaf word
|
||||||
* Bygevoeg deur die toestel **fabrikant**
|
* Bygevoeg deur die toestel **fabrikant**
|
||||||
|
@ -74,7 +74,7 @@ Let daarop dat die rooting proses baie gevaarlik is en die toestel ernstig kan b
|
||||||
### ROMs
|
### ROMs
|
||||||
|
|
||||||
Dit is moontlik om die **OS te vervang deur 'n pasgemaakte firmware te installeer**. Deur dit te doen, is dit moontlik om die nuttigheid van 'n ou toestel uit te brei, sagtewarebeperkings te omseil of toegang tot die nuutste Android kode te verkry.\
|
Dit is moontlik om die **OS te vervang deur 'n pasgemaakte firmware te installeer**. Deur dit te doen, is dit moontlik om die nuttigheid van 'n ou toestel uit te brei, sagtewarebeperkings te omseil of toegang tot die nuutste Android kode te verkry.\
|
||||||
**OmniROM** en **LineageOS** is twee van die gewildste firmware om te gebruik.
|
**OmniROM** en **LineageOS** is twee van die gewildste firmwares om te gebruik.
|
||||||
|
|
||||||
Let daarop dat **dit nie altyd nodig is om die toestel te root nie** om 'n pasgemaakte firmware te installeer. **Sommige vervaardigers laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
|
Let daarop dat **dit nie altyd nodig is om die toestel te root nie** om 'n pasgemaakte firmware te installeer. **Sommige vervaardigers laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil
|
||||||
|
|
||||||
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||||
|
|
||||||
- Die formaat van Android toepassings word verwys na as _APK lêerformaat_. Dit is essensieel 'n **ZIP lêer** (deur die lêer uitbreiding na .zip te hernoem, kan die inhoud onttrek en gesien word).
|
- Die formaat van Android toepassings word verwys na as _APK lêerformaat_. Dit is essensieel 'n **ZIP lêer** (deur die lêernaamsextensie na .zip te hernoem, kan die inhoud onttrek en besigtig word).
|
||||||
- APK Inhoud (Nie uitputtend nie)
|
- APK Inhoud (Nie uitputtend nie)
|
||||||
- **AndroidManifest.xml**
|
- **AndroidManifest.xml**
|
||||||
- resources.arsc/strings.xml
|
- resources.arsc/strings.xml
|
||||||
|
@ -95,7 +95,7 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil
|
||||||
- **classes.dex**
|
- **classes.dex**
|
||||||
- Bevat Dalvik bytecode, wat die gecompileerde Java (of Kotlin) kode verteenwoordig wat die toepassing standaard uitvoer.
|
- Bevat Dalvik bytecode, wat die gecompileerde Java (of Kotlin) kode verteenwoordig wat die toepassing standaard uitvoer.
|
||||||
- lib/
|
- lib/
|
||||||
- Huisves inheemse biblioteke, gesegregeer volgens CPU argitektuur in subdirectories.
|
- Huisves inheemse biblioteke, gesegregeer volgens CPU argitektuur in subgidse.
|
||||||
- `armeabi`: kode vir ARM-gebaseerde verwerkers
|
- `armeabi`: kode vir ARM-gebaseerde verwerkers
|
||||||
- `armeabi-v7a`: kode vir ARMv7 en hoër gebaseerde verwerkers
|
- `armeabi-v7a`: kode vir ARMv7 en hoër gebaseerde verwerkers
|
||||||
- `x86`: kode vir X86 verwerkers
|
- `x86`: kode vir X86 verwerkers
|
||||||
|
@ -107,22 +107,22 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil
|
||||||
|
|
||||||
### **Dalvik & Smali**
|
### **Dalvik & Smali**
|
||||||
|
|
||||||
In Android ontwikkeling, **Java of Kotlin** word gebruik om apps te skep. In plaas daarvan om die JVM soos in desktop apps te gebruik, compileer Android hierdie kode in **Dalvik Executable (DEX) bytecode**. Eerder het die Dalvik virtuele masjien hierdie bytecode hanteer, maar nou neem die Android Runtime (ART) oor in nuwer Android weergawes.
|
In Android ontwikkeling, **Java of Kotlin** word gebruik om apps te skep. In plaas daarvan om die JVM soos in lessenaarapps te gebruik, compileer Android hierdie kode in **Dalvik Executable (DEX) bytecode**. Eerder het die Dalvik virtuele masjien hierdie bytecode hanteer, maar nou neem die Android Runtime (ART) oor in nuwer Android weergawes.
|
||||||
|
|
||||||
Vir omgekeerde ingenieurswese, word **Smali** noodsaaklik. Dit is die menslike leesbare weergawe van DEX bytecode, wat soos assembly taal optree deur bronkode in bytecode instruksies te vertaal. Smali en baksmali verwys na die samestelling en ontbinding gereedskap in hierdie konteks.
|
Vir omgekeerde ingenieurswese, word **Smali** noodsaaklik. Dit is die menslike leesbare weergawe van DEX bytecode, wat soos assemblytaal optree deur bronkode in bytecode instruksies te vertaal. Smali en baksmali verwys na die samestelling en ontbinding gereedskap in hierdie konteks.
|
||||||
|
|
||||||
## Intents
|
## Intents
|
||||||
|
|
||||||
Intents is die primêre middel waardeur Android apps tussen hul komponente of met ander apps kommunikeer. Hierdie boodskapobjekte kan ook data tussen apps of komponente dra, soortgelyk aan hoe GET/POST versoeke in HTTP kommunikasies gebruik word.
|
Intents is die primêre middel waardeur Android apps tussen hul komponente of met ander apps kommunikeer. Hierdie boodskapobjekte kan ook data tussen apps of komponente dra, soortgelyk aan hoe GET/POST versoeke in HTTP kommunikasies gebruik word.
|
||||||
|
|
||||||
So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig** word aan spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\
|
So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig word** na spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\
|
||||||
Om dit eenvoudig te stel, kan Intent gebruik word:
|
Om dit eenvoudig te stel, kan Intent gebruik word:
|
||||||
|
|
||||||
* Om 'n Aktiwiteit te begin, tipies om 'n gebruikerskoppelvlak vir 'n app te open
|
* Om 'n Aktiwiteit te begin, wat tipies 'n gebruikerskoppelvlak vir 'n app oopmaak
|
||||||
* As uitsendings om die stelsel en apps van veranderinge in kennis te stel
|
* As uitsendings om die stelsel en apps van veranderinge in kennis te stel
|
||||||
* Om 'n agtergronddiens te begin, stop, en kommunikeer
|
* Om 'n agtergronddiens te begin, stop, en kommunikeer
|
||||||
* Om toegang tot data via ContentProviders te verkry
|
* Om toegang tot data via ContentProviders te verkry
|
||||||
* As terugroep funksies om gebeurtenisse te hanteer
|
* As terugroep om gebeurtenisse te hanteer
|
||||||
|
|
||||||
As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voer**.
|
As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voer**.
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voe
|
||||||
|
|
||||||
Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat by die verklaarde kriteria pas.
|
Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat by die verklaarde kriteria pas.
|
||||||
|
|
||||||
'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoudverskaffers/uitsendingsontvangers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps kommunikeer as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps kommunikeer nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies te stel.
|
'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoudverskaffers/uitsendingsontvangers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps kommunikeer as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps kommunikeer nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies in te stel.
|
||||||
|
|
||||||
Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te beveilig deur spesifieke toestemmings te vereis. Die **`permission`** attribuut kan gestel word om af te dwing dat slegs apps met die aangewese toestemming toegang tot die komponent kan verkry, wat 'n ekstra laag van sekuriteit en beheer oor wie daarmee kan kommunikeer, toevoeg.
|
Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te beveilig deur spesifieke toestemmings te vereis. Die **`permission`** attribuut kan gestel word om af te dwing dat slegs apps met die aangewese toestemming toegang tot die komponent kan verkry, wat 'n ekstra laag van sekuriteit en beheer oor wie daarmee kan kommunikeer, toevoeg.
|
||||||
```java
|
```java
|
||||||
|
@ -142,7 +142,7 @@ Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te b
|
||||||
```
|
```
|
||||||
### Implicit Intents
|
### Implicit Intents
|
||||||
|
|
||||||
Intents word programmaties geskep met behulp van 'n Intent-konstruktors:
|
Intents word programmaties geskep met 'n Intent-konstruktors:
|
||||||
```java
|
```java
|
||||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
```
|
```
|
||||||
|
@ -157,9 +157,9 @@ Hierdie intent moet binne die manifest verklaar word soos in die volgende voorbe
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
'n intent-filter moet die **aksie**, **data** en **kategorie** ooreenstem om 'n boodskap te ontvang.
|
'n Intent-filter moet die **aksie**, **data** en **kategorie** ooreenstem om 'n boodskap te ontvang.
|
||||||
|
|
||||||
Die "Intent resolusie" proses bepaal watter app elke boodskap moet ontvang. Hierdie proses oorweeg die **prioriteit eienskap**, wat in die i**ntent-filter verklaring** gestel kan word, en t**een met die hoër prioriteit sal gekies word**. Hierdie prioriteit kan tussen -1000 en 1000 gestel word en toepassings kan die `SYSTEM_HIGH_PRIORITY` waarde gebruik. As 'n **konflik** ontstaan, verskyn 'n "choser" venster sodat die **gebruiker kan besluit**.
|
Die "Intent resolusie" proses bepaal watter app elke boodskap moet ontvang. Hierdie proses oorweeg die **prioriteit eienskap**, wat in die **intent-filter verklaring** gestel kan word, en **die een met die hoër prioriteit sal gekies word**. Hierdie prioriteit kan tussen -1000 en 1000 gestel word en toepassings kan die `SYSTEM_HIGH_PRIORITY` waarde gebruik. As 'n **konflik** ontstaan, verskyn 'n "choser" venster sodat die **gebruiker kan besluit**.
|
||||||
|
|
||||||
### Expliciete Intents
|
### Expliciete Intents
|
||||||
|
|
||||||
|
@ -179,14 +179,14 @@ Hierdie laat ander toepassings toe om **aksies namens jou toepassing te neem**,
|
||||||
|
|
||||||
### Broadcast Intents
|
### Broadcast Intents
|
||||||
|
|
||||||
Anders as die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur verskeie apps ontvang word**. egter, vanaf API weergawe 14, is dit **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.set Package.
|
Anders as die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur verskeie apps ontvang word**. Vanaf API weergawe 14 is dit egter **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage.
|
||||||
|
|
||||||
Alternatiewelik is dit ook moontlik om **'n toestemming te spesifiseer wanneer die broadcast gestuur word**. Die ontvangende app sal daardie toestemming moet hê.
|
Alternatiewelik is dit ook moontlik om **'n toestemming te spesifiseer wanneer die broadcast gestuur word**. Die ontvangende app sal daardie toestemming moet hê.
|
||||||
|
|
||||||
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (sinchrone). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.**
|
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (synchroniese). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.**
|
||||||
|
|
||||||
Dit is moontlik om 'n **broadcast** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\
|
Dit is moontlik om **'n broadcast** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\
|
||||||
Jy kan ook die funksie **`sendBroadcast`** van die **`LocalBroadCastManager`** gebruik wat verseker dat die **boodskap nooit die app verlaat nie**. Deur dit te gebruik, sal jy selfs nie 'n ontvanger komponent hoef te eksport nie.
|
Jy kan ook die funksie **`sendBroadcast`** van die **`LocalBroadCastManager`** gebruik wat verseker dat die **boodskap nooit die app verlaat nie**. Deur dit te gebruik, sal jy selfs nie 'n ontvanger komponent hoef te eksporteer nie.
|
||||||
|
|
||||||
### Sticky Broadcasts
|
### Sticky Broadcasts
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ Hierdie tipe Uitsendings **kan lank nadat hulle gestuur is, toeganklik wees**.\
|
||||||
Hierdie is in API vlak 21 verouderd en dit word aanbeveel om **nie hulle te gebruik nie**.\
|
Hierdie is in API vlak 21 verouderd en dit word aanbeveel om **nie hulle te gebruik nie**.\
|
||||||
**Hulle laat enige toepassing toe om die data te snuffel, maar ook om dit te wysig.**
|
**Hulle laat enige toepassing toe om die data te snuffel, maar ook om dit te wysig.**
|
||||||
|
|
||||||
As jy funksies vind wat die woord "sticky" bevat soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**.
|
As jy funksies vind wat die woord "sticky" bevat, soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**.
|
||||||
|
|
||||||
## Deep links / URL schemes
|
## Deep links / URL schemes
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ Die skema moet in die **`AndroidManifest.xml`** lêer verklaar word:
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
Die skema van die vorige voorbeeld is `exampleapp://` (let ook op die **`category BROWSABLE`**)
|
Die skema van die vorige voorbeeld is `examplescheme://` (let ook op die **`category BROWSABLE`**)
|
||||||
|
|
||||||
Dan kan jy in die data veld die **host** en **path** spesifiseer:
|
Dan kan jy in die data veld die **host** en **path** spesifiseer:
|
||||||
```xml
|
```xml
|
||||||
|
@ -239,7 +239,7 @@ Die **Android Interface Definition Language (AIDL)** is ontwerp om kommunikasie
|
||||||
|
|
||||||
- **Messenger**: As 'n gekoppelde diens, fasiliteer Messenger IPC met 'n fokus op die verwerking van data deur die `onBind` metode. Dit is noodsaaklik om hierdie metode noukeurig te ondersoek vir enige onveilige datahantering of uitvoering van sensitiewe funksies.
|
- **Messenger**: As 'n gekoppelde diens, fasiliteer Messenger IPC met 'n fokus op die verwerking van data deur die `onBind` metode. Dit is noodsaaklik om hierdie metode noukeurig te ondersoek vir enige onveilige datahantering of uitvoering van sensitiewe funksies.
|
||||||
|
|
||||||
- **Binder**: Alhoewel direkte gebruik van die Binder klas minder algemeen is weens AIDL se abstraksie, is dit voordelig om te verstaan dat Binder as 'n kernvlak bestuurder optree wat datatransfer tussen die geheue ruimtes van verskillende prosesse fasiliteer. Vir verdere begrip is 'n hulpbron beskikbaar by [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
- **Binder**: Alhoewel direkte gebruik van die Binder-klas minder algemeen is weens AIDL se abstraksie, is dit voordelig om te verstaan dat Binder as 'n kernvlak bestuurder optree wat datatransfer tussen die geheue ruimtes van verskillende prosesse fasiliteer. Vir verdere begrip is 'n hulpbron beskikbaar by [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||||
|
|
||||||
## Komponente
|
## Komponente
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ super.onCreate();
|
||||||
|
|
||||||
Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **Intents** as die primêre metode om hulle as 'n toepassing se toegangspunt te begin. Sodra 'n diens begin is met die `startService` metode, begin sy `onStart` metode en hou aan om te loop totdat die `stopService` metode eksplisiet aangeroep word. Alternatiewelik, as 'n diens se rol afhanklik is van 'n aktiewe kliëntverbinding, word die `bindService` metode gebruik om die kliënt aan die diens te bind, wat die `onBind` metode aktiveer vir dataversending.
|
Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **Intents** as die primêre metode om hulle as 'n toepassing se toegangspunt te begin. Sodra 'n diens begin is met die `startService` metode, begin sy `onStart` metode en hou aan om te loop totdat die `stopService` metode eksplisiet aangeroep word. Alternatiewelik, as 'n diens se rol afhanklik is van 'n aktiewe kliëntverbinding, word die `bindService` metode gebruik om die kliënt aan die diens te bind, wat die `onBind` metode aktiveer vir dataversending.
|
||||||
|
|
||||||
'n Interessante toepassing van dienste sluit agtergrondmusiekafspeel of netwerkdata-ophaal in sonder om die gebruiker se interaksie met 'n toepassing te hindern. Boonop kan dienste beskikbaar gemaak word vir ander prosesse op dieselfde toestel deur **uitvoer**. Dit is nie die standaardgedrag nie en vereis eksplisiete konfigurasie in die Android Manifest-lêer:
|
'n Interessante toepassing van dienste sluit agtergrondmusiekafspeel of netwerkdata-opeising in sonder om die gebruiker se interaksie met 'n toepassing te hindern. Boonop kan dienste beskikbaar gemaak word vir ander prosesse op dieselfde toestel deur **uitvoer**. Dit is nie die standaardgedrag nie en vereis eksplisiete konfigurasie in die Android Manifest-lêer:
|
||||||
```xml
|
```xml
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
|
@ -308,7 +308,7 @@ Om 'n ontvanger se funksionaliteit te verstaan, soek na die **`onReceive`** meto
|
||||||
|
|
||||||
### Content Provider
|
### Content Provider
|
||||||
|
|
||||||
**Content Providers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels, of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is noodsaaklik om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangsbeheer.
|
**Content Providers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels, of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is van kardinale belang om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer.
|
||||||
|
|
||||||
Invoervalidasie is van kardinale belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Content Providers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer.
|
Invoervalidasie is van kardinale belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Content Providers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer.
|
||||||
|
|
||||||
|
@ -336,14 +336,14 @@ For further information check:
|
||||||
|
|
||||||
## WebViews
|
## WebViews
|
||||||
|
|
||||||
WebViews is soos **mini webblaaiers** binne Android-apps, wat inhoud trek of van die web of van plaaslike lêers. Hulle ondervind soortgelyke risiko's as gewone blaaiers, maar daar is maniere om hierdie **risiko's te verminder** deur spesifieke **instellings**.
|
WebViews is soos **mini webblaaiers** binne Android-apps, wat inhoud trek of van die web of van plaaslike lêers. Hulle ondervind soortgelyke risiko's as gewone blaaiers, maar daar is maniere om hierdie **risiko's** te **verlaag** deur spesifieke **instellings**.
|
||||||
|
|
||||||
Android bied twee hoof WebView tipes:
|
Android bied twee hoof WebView-tipes:
|
||||||
|
|
||||||
- **WebViewClient** is uitstekend vir basiese HTML, maar ondersteun nie die JavaScript waarskuwing funksie nie, wat die toetsing van XSS-aanvalle beïnvloed.
|
- **WebViewClient** is uitstekend vir basiese HTML, maar ondersteun nie die JavaScript waarskuwing funksie nie, wat die toetsing van XSS-aanvalle beïnvloed.
|
||||||
- **WebChromeClient** funksioneer meer soos die volle Chrome-blaaierervaring.
|
- **WebChromeClient** funksioneer meer soos die volle Chrome-blaaierervaring.
|
||||||
|
|
||||||
'n Sleutelpunt is dat WebView-blaaiers **nie koekies deel nie** met die toestel se hoofblaaier.
|
'n Sleutelpunt is dat WebView-blaaiers **nie koekies** met die toestel se hoofblaaier deel nie.
|
||||||
|
|
||||||
Vir die laai van inhoud is metodes soos ````loadUrl````, ````loadData````, en ````loadDataWithBaseURL```` beskikbaar. Dit is van kardinale belang om te verseker dat hierdie URL's of lêers **veilig is om te gebruik**. Sekuriteitsinstellings kan bestuur word via die ````WebSettings```` klas. Byvoorbeeld, om JavaScript te deaktiveer met ````setJavaScriptEnabled(false)```` kan XSS-aanvalle voorkom.
|
Vir die laai van inhoud is metodes soos ````loadUrl````, ````loadData````, en ````loadDataWithBaseURL```` beskikbaar. Dit is van kardinale belang om te verseker dat hierdie URL's of lêers **veilig is om te gebruik**. Sekuriteitsinstellings kan bestuur word via die ````WebSettings```` klas. Byvoorbeeld, om JavaScript te deaktiveer met ````setJavaScriptEnabled(false)```` kan XSS-aanvalle voorkom.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue