# iOS Universal Links
{{#include ../../banners/hacktricks-training.md}}
## Uvod
Universal links nude **besprekorno preusmeravanje** korisnicima otvarajući sadržaj direktno u aplikaciji, zaobilazeći potrebu za preusmeravanjem na Safari. Ove veze su **jedinstvene** i sigurne, jer ih druge aplikacije ne mogu preuzeti. To se osigurava hostovanjem `apple-app-site-association` JSON datoteke u korenskom direktorijumu veb sajta, uspostavljajući verifikovanu vezu između veb sajta i aplikacije. U slučajevima kada aplikacija nije instalirana, Safari će preuzeti kontrolu i usmeriti korisnika na veb stranicu, održavajući prisustvo aplikacije.
Za testere penetracije, `apple-app-site-association` datoteka je od posebnog interesa jer može otkriti **osetljive putanje**, potencijalno uključujući one vezane za neobjavljene funkcije.
### **Analiza Associated Domains ovlašćenja**
Programeri omogućavaju Universal Links konfigurisanjem **Associated Domains** u Xcode-ovom tabu Capabilities ili inspekcijom `.entitlements` datoteke. Svaka domena je prefiksirana sa `applinks:`. Na primer, konfiguracija Telegram-a može izgledati ovako:
```xml
com.apple.developer.associated-domains
applinks:telegram.me
applinks:t.me
```
Za sveobuhvatnije uvide, pogledajte [arhiviranu Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
Ako radite sa kompajliranom aplikacijom, prava se mogu izvući kao što je opisano u [ovom vodiču](extracting-entitlements-from-compiled-application.md).
### **Preuzimanje Apple App Site Association Fajla**
Fajl `apple-app-site-association` treba preuzeti sa servera koristeći domene navedene u pravima. Osigurajte da je fajl dostupan putem HTTPS direktno na `https:///apple-app-site-association`. Alati poput [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/) mogu pomoći u ovom procesu.
### **Rukovanje Universal Links u Aplikaciji**
Aplikacija mora implementirati specifične metode za pravilno rukovanje univerzalnim linkovima. Primarna metoda koju treba tražiti je [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Ključno je da shema URL-ova koji se obrađuju bude HTTP ili HTTPS, jer drugi neće biti podržani.
#### **Validacija Metode Rukovaoca Podacima**
Kada univerzalni link otvori aplikaciju, `NSUserActivity` objekat se prosleđuje aplikaciji sa URL-om. Pre obrade ovog URL-a, važno je validirati i sanitizovati ga kako bi se sprečili sigurnosni rizici. Evo primera u Swift-u koji prikazuje proces:
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
```
URL-ovi treba pažljivo analizirati i validirati, posebno ako uključuju parametre, kako bi se zaštitili od potencijalnog lažiranja ili neispravnih podataka. `NSURLComponents` API je koristan za ovu svrhu, kao što je prikazano u nastavku:
```swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index
return true
} else {
// Handle invalid or missing parameters
return false
}
}
```
Kroz **pažljivu konfiguraciju i validaciju**, programeri mogu osigurati da univerzalni linkovi poboljšaju korisničko iskustvo, dok održavaju standarde sigurnosti i privatnosti.
## Alati
- [GetUniversal.link](https://getuniversal.link/): Pomaže u pojednostavljivanju testiranja i upravljanja univerzalnim linkovima i AASA datotekom vaše aplikacije. Jednostavno unesite svoju domenu da biste proverili integritet AASA datoteke ili koristite prilagođenu kontrolnu tablu za lako testiranje ponašanja linkova. Ovaj alat vam takođe pomaže da odredite kada će Apple sledeći put indeksirati vašu AASA datoteku.
## Reference
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
{{#include ../../banners/hacktricks-training.md}}