Chraňte soukromí svých uživatelů: Zabezpečení aplikací pro Android pro vývojáře

Autor: Peter Berry
Datum Vytvoření: 20 Lang L: none (month-012) 2021
Datum Aktualizace: 16 Červen 2024
Anonim
Chraňte soukromí svých uživatelů: Zabezpečení aplikací pro Android pro vývojáře - Aplikace
Chraňte soukromí svých uživatelů: Zabezpečení aplikací pro Android pro vývojáře - Aplikace

Obsah


Pokud se chystáte pověsit na své publikum a svou pověst důvěryhodného vývojáře systému Android, musíte jako vývojáře brát zabezpečení aplikací pro Android vážně.

Pokud vaše aplikace někdy unikne soukromým datům, hrozí vám ztráta velké části publika. Dnešní technicky zdatní mobilní uživatelé chápou, že nejlepším způsobem, jak se chránit před nezabezpečenou aplikací, je jejich odstranění ze zařízení. Média hlásí také vážné narušení dat, takže přijetí nedbalého přístupu k mobilní bezpečnosti může mít za následek velmi špatnou publicitu.

Sázky jsou vysoké a s novými škodlivými aplikacemi, které jsou neustále vydávány, existuje stále větší šance, že vaše aplikace může sdílet zařízení se malwarem a škodlivým kódem třetích stran.


Drobný přístup k mobilní bezpečnosti může mít za následek velmi špatnou publicitu.

Naštěstí má Android širokou škálu vestavěných bezpečnostních funkcí, které vám pomohou udržet data vašich uživatelů pevně uzavřená. V tomto článku prozkoumáme všechny hlavní funkce ochrany osobních údajů, které jsou upečeny na platformě Android, a další nástroje, techniky a doporučené postupy, které můžete použít k zajištění toho, aby vaše soukromá data aplikací zůstala soukromá.

Udržujte své závislosti aktuální

U moderních mobilních aplikací není neobvyklé používat více knihoven, sady SDK a mnoho dalších různých závislostí. Nová vydání těchto závislostí často obsahují opravy chyb, záplaty a další funkce zabezpečení, takže při vývoji aplikace musíte zajistit, že používáte nejnovější verze.


Před nasazením aplikace je také vhodné provést jednu závěrečnou kontrolu, abyste se ujistili, že nejsou k dispozici žádné aktualizace.

Pokud vaše aplikace používá služby Google Play, můžete zkontrolovat, zda má zařízení uživatele nainstalovanou nejnovější verzi a v případě potřeby spustit aktualizaci.

Chcete-li otestovat, zda jsou služby Google Play v zařízení aktuální, volejte metodu installIfNeeded () třídy ProviderInstaller. Pokud je k dispozici aktualizace, tato metoda vyvolá výjimku autorizace a uživatel bude vyzván k aktualizaci služeb Google Play na svém zařízení.

Omezte své žádosti o povolení

Pokud vaše aplikace nemá přístup k povolení, pak je nulová pravděpodobnost, že nezmění některá citlivá data nebo funkce spojené s tímto povolením. Omezení přístupu k citlivým oprávněním může také z vaší aplikace učinit méně přitažlivý cíl pro hackery, takže je důležité požádat o co nejméně oprávnění.

Před provedením žádný žádosti o povolení, měli byste zvážit, zda existuje způsob, jak dosáhnout stejného výsledku, aniž byste k tomuto povolení měli přístup. Například, pokud potřebujete uložit některá data, můžete přistupovat k místnímu úložišti bez vyžádání jakýchkoli oprávnění, namísto pokusu o uložení dat externě, což vyžaduje oprávnění WRITE_EXTERNAL_STORAGE.

Můžete také použít záměry k předání úkolu aplikaci, která již má potřebná oprávnění. Například namísto vyžádání oprávnění READ_CONTACTS a WRITE_CONTACTS můžete delegovat úkol na aplikaci Kontakty:

Záměr contactIntent = nový záměr (Záměr.ACTION_INSERT); contactIntent.setType (ContactsContract.Contacts.CONTENT_TYPE); if (contactIntent.resolveActivity (getPackageManager ())! = null) {startActivity (contactIntent); }

Také byste se měli vzdát veškerých oprávnění, která vaše aplikace již nepotřebuje, což může výrazně snížit množství citlivých dat a funkcí, ke kterým má aplikace kdykoli přístup.

Umožněte uživatelům, aby se rozhodli: Zobrazení aplikace pro výběr

Proč ztrácet čas a energii znovuobjevovat kolo? Implicitní záměry vám umožňují provádět úkoly ve spolupráci s aplikacemi třetích stran a snižují tak množství kódu, který je třeba napsat, abyste mohli poskytovat všechny požadované funkce aplikace. Předáním úkolu do jiné aplikace můžete také snížit počet oprávnění, která vaše aplikace vyžaduje.

Implicitní záměry vám mohou ušetřit tunu času, ale také vám nula kontrolu nad tím, která aplikace odpovídá na váš požadavek. Pokud nezabezpečená nebo škodlivá aplikace třetí strany odpoví na váš implicitní záměr, pak existuje šance, že nechtěně vystavíte osobní údaje uživatele třetí straně.Pokud je v důsledku aplikace třetí strany narušeno soukromí uživatele, může být vaše aplikace považována za vinnou přidružením.

Při vydávání implicitního záměru byste měli pokud možno zobrazit aplikaci pro výběr aplikací pro Android.

Předložíte-li uživateli seznam všech aplikací, které mohou na tento záměr reagovat, dáváte jim možnost vybrat si aplikaci, které osobně důvěřují. Ačkoli neexistuje žádná záruka, že si každý uživatel vybere rozumně, může to snížit šanci, že sdílíte data s nedůvěryhodnou aplikací.

Při vydávání záměru byste měli zkontrolovat, zda má uživatel více aplikací, které tento záměr zvládnou. Za předpokladu, že je k dispozici více kompatibilních aplikací, můžete poté vybrat aplikaci voláním createChooser () a předáním startActivity ():

Záměr myIntent = nový záměr (Záměr.ACTION_SEND); Seznam possibleActivitiesList = queryIntentActivities (záměr, PackageManager.MATCH_ALL); // Zkontrolujte, zda tento záměr zvládne více než jedna aplikace // if (possibleActivitiesList.size ()> 1) {// Zobrazte volbu aplikace // String title = getResources (). GetString (R.string.app_chooser_title); Intent chooser = Intent.createChooser (záměr, název); startActivity (výběr); } else if (záměr.resolveActivity (getPackageManager ())! = null) {startActivity (záměr); }

Nezapomeňte, že byste nikdy neměli používat implicitní záměr ke spuštění služby, protože nemáte žádnou kontrolu nad tím, která služba odpovídá na váš implicitní záměr.

Vyvarujte se externího skladování

Musíte zajistit, aby žádná data uložená v zařízení uživatele nebyla přístupná jiným aplikacím - pokud těmto aplikacím výslovně neschválíte.

Soubory uložené do externího úložiště jsou celosvětově čitelné a zapisovatelné, takže ke všem datům uloženým do externího úložiště lze přistupovat a upravovat je pomocí jakékoli jiné aplikace. Neexistuje ani žádná záruka, že externí paměťové médium zůstane připojeno k aktuálnímu smartphonu nebo tabletu. Pokud se vaše aplikace zapíše do externího úložiště, můžete potenciálně ukládat citlivá uživatelská data na SD kartu, která bude později odebrána a vložena do zařízení někoho jiného!

Pokud nemáte konkrétní důvod, proč byste to neměli, měli byste vždy ukládat data do interního úložiště, kde jsou izolovaná a budou ve výchozím nastavení přístupná pouze pro vaši aplikaci. Pokud uživatel odinstaluje vaši aplikaci, budou všechny soubory aplikace automaticky odstraněny z interního úložiště, takže se nemusíte obávat žádných citlivých informací.

V následujícím úryvku zapisujeme data do interního úložiště:

final String FILE_NAME = "user_data.txt"; String fileContents = "Tento textový soubor obsahuje citlivá uživatelská data"; try (BufferedWriter writer = new BufferedWriter (nový FileWriter (nový File (getFilesDir (), FILE_NAME))))) {writer.write (fileContents); } úlovek (IOException e) {// Úkol: Zpracovat výjimku //}

Pokud jsou data zvláště citlivá, můžete poskytnout další zabezpečení aplikací pro Android šifrováním souborů klíčem, který není přístupný vaší aplikaci, například klíčem, který je umístěn v úložišti klíčů a chráněn heslem, které není uloženo v zařízení.

Použijte nový přístup k adresáři v systému Android

Někdy může aplikace vyžadovat přístup k určitým adresářům v externím úložišti zařízení, například získání přístupu do externího adresáře Obrázky zařízení.

I když můžete požádat o oprávnění READ_EXTERNAL_STORAGE, často to aplikaci poskytne přístup k více datům, než potřebuje. Je nemožné, aby aplikace zacházela s daty, ke kterým nemá přístup, takže byste se měli pokusit minimalizovat množství informací, ke kterým má aplikace přístup, kdykoli je to možné.

Namísto vyžádání oprávnění READ_EXTERNAL_STORAGE můžete požádat o přístup do konkrétního adresáře. Tento přístup k adresáři vyžaduje, abyste použili třídu StorageManager a poté vytvořili záměr voláním metody StorageVolume.createAccessIntent () této instance. Například v následujícím úryvku přistupujeme k externímu adresáři Obrázky:

StorageManager newStorageManager = (StorageManager) getSystemService (Context.STORAGE_SERVICE); VolumeVolume volume = newStorageManager.getPrimaryStorageVolume (); Záměr záměr = volume.createAccessIntent (Environment.DIRECTORY_PICTURES); startActivityForResult (záměr, request_code);

Pokud uživatel udělí vaší aplikaci přístup do tohoto externího adresáře, systém Android zavolá váš přepínač onActivityResult () přepsaný kódem výsledku RESULT_OK plus záměr obsahující URI pro požadovaný adresář.

Nikdy nevyrovnávejte citlivá uživatelská data

Při manipulaci s necitlivými daty aplikací budete možná moci vylepšit uživatelský dojem uložením těchto dat do mezipaměti zařízení.

Pro mezipaměti větší než 1 MB můžete použít getExternalCacheDir (), který vrátí cestu do adresáře specifické pro aplikaci, kde můžete ukládat obsah uložený v mezipaměti.

Pokud se rozhodnete mezipaměť, pak si uvědomte, že každá aplikace, která má oprávnění WRITE_EXTERNAL_STORAGE, může do těchto souborů potenciálně zapisovat, takže byste měli nikdy ukládat soukromé nebo citlivé informace do mezipaměti, pokud vám záleží na zabezpečení aplikací pro Android.

Chraňte své klíče před neoprávněným použitím

Systém Android Keystore vám umožňuje ukládat kryptografické klíče do kontejneru, což ztěžuje extrahování těchto klíčů ze zařízení.

Android Keystore zajišťuje, že klíčový materiál nikdy nevstoupí do procesu aplikace, takže i když jsou procesy vaší aplikace ohroženy a útočník dokáže získat přístup ke svým klíčům, nebude schopen extrahovat jejich klíčový materiál.

Pomocí úložiště klíčů můžete také omezit, kdy a jak mohou být vaše klíče použity, například můžete omezit použití klíče na určité kryptografické režimy nebo vyžadovat ověření uživatele.

Nastavte své ContentProviders jako soukromé

ContentProviders jsou strukturované mechanismy úložiště, které můžete pro vaši aplikaci učinit soukromými nebo se rozhodnout exportovat, a v tuto chvíli budou přístupné pro jiné aplikace.

Pokud výslovně nepotřebujete sdílet data s aplikací třetích stran, měli byste všechny své ContentProviders soukromé označit jako android: export = false v manifestu aplikace. Pokud je vaše aplikace kompatibilní s Androidem 4.1.1 nebo nižším, je zvláště důležité, abyste označili své soukromé ContentProviders jako android: export = false, protože ve výchozím nastavení jsou všichni ContentProviders veřejní.

Otisky prstů vašich uživatelů pomocí biometrické autentizace

Než uživateli povolíte přístup k citlivým informacím nebo funkcím vaší aplikace, měli byste ověřit jejich totožnost vyžádáním jejich přihlašovacích údajů.

Přihlašovací údaje uživatele mohou mít podobu kódu PIN nebo hesla, avšak pokud je to možné, je mnohem bezpečnější provádět biometrickou autentizaci, například vyžádáním otisku prstu uživatele.

Následovat Všechno osvědčené postupy vytváření sítí

Na rozdíl od méně přenosných zařízení, jako jsou stolní počítače, často připojujeme naše chytré telefony a tablety k nezabezpečeným bezdrátovým sítím, jako je bezplatné veřejné Wi-Fi. Chcete-li zachovat soukromí uživatele, měli byste přistupovat ke všem síťovým transakcím jako ze své podstaty riskantní, zvláště když přenášíte uživatelská data.

Kdykoli potřebujete provést síťovou transakci, je důležité, abyste dodržovali všechny doporučené postupy Android pro síť:

  • Používejte HTTPS místo HTTP, kdykoli je to na serveru podporováno.
  • Nikdy nedůvěřujte datům staženým z nezabezpečených protokolů, včetně odpovědí na HTTP.
  • Pro citlivá data používejte vhodné protokoly, jako je HttpsURLConnection.
  • Pokud je možné ověření, použijte mechanismus IPC pro Android, například službu.
  • Pomocí nástroje pro zabezpečení sítě Nogotofail s otevřeným zdrojovým kódem otestujte svou aplikaci proti známým zranitelnostem a nesprávným konfiguracím TLS / SSL. Nogotofail zahrnuje testy na běžné problémy s ověřováním certifikátů SSL, chyby knihoven HTTPS a TLS / SSL, problémy s čistým textem a problémy s odstraňováním SSL a STARTTLS. Další informace naleznete na stránce GitHub společnosti Nogotofail.
  • Kdykoli je to možné, vyhněte se načítání kódu mimo APK, protože to zvyšuje šance někoho v síti modifikovat váš kód během přenosu.

WebView používejte opatrně

Komponenta WebView může spotřebovávat HTML a JavaScript, takže pokud používáte WebViews nesprávně, bude vaše aplikace náchylná k běžným problémům s webovou bezpečností, jako je například skriptování mezi weby.

Pokud používáte WebViews nesprávně, bude vaše aplikace náchylná k běžným problémům s webovou bezpečností.

Abychom zajistili bezpečnost uživatelů systému Android, komponenta WebView ve výchozím nastavení nespouští JavaScript. V případě potřeby však můžete povolit JavaScript pomocí getSettings () k načtení WebSettings a poté spuštěním metody setJavaScriptEnabled ():

WebView myWebView = (WebView) findViewById (R.id.webview); WebSettings webSettings = myWebView.getSettings (); webSettings.setJavaScriptEnabled (true);

I když potřebujete povolit JavaScript, měli byste se pokud možno vyhnout použití addJavaScriptInterface (), protože tato metoda vloží dodaný objekt Java do komponenty WebView. Pokud je aplikace nainstalována v zařízení se systémem Android 4.2 nebo starším, může tato metoda potenciálně umožnit JavaScript manipulovat s vaší aplikací.

Používáte-li webová zobrazení, neměli byste uživatelům umožňovat navigaci na jakýkoli web, který neovládáte, ale zejména byste měli nikdy použijte metodu addJavascriptInterface (), pokud by uživatel mohl případně přejít na nedůvěryhodnou webovou stránku, protože se jedná o velké riziko zabezpečení aplikací pro Android.

Pokud by uživatel mohl případně přejít na nedůvěryhodnou webovou stránku, neměli byste nikdy používat metodu addJavascriptInterface ().

Pokud vaše komponenta WebView přistupuje k jakýmkoli osobním údajům, možná budete chtít pravidelně mazat všechny soubory, které jsou uloženy lokálně, pomocí metody clearCache (). Případně můžete zabránit tomu, aby aplikace ukládala citlivý obsah do mezipaměti pomocí záhlaví na straně serveru bez mezipaměti.

Správa vrstvy Secure Sockets Layer (SSL) vaší aplikace

SSL je běžnou součástí šifrované komunikace mezi klienty a servery. Pokud vaše aplikace používá protokol SSL nesprávně, mohou škodlivé třetí strany potenciálně zachytit data vaší aplikace, zatímco je přenášena sítí.

Server je obvykle konfigurován s certifikátem obsahujícím veřejný klíč a odpovídající soukromý klíč. V rámci komunikace mezi klientem SSL a serverem server podepíše svůj certifikát kryptografií veřejného klíče. Je však možné, že třetí strana vygeneruje svůj vlastní certifikát a soukromý klíč, takže váš klient by měl mít také jeden nebo více certifikátů, kterým důvěřuje. Pokud není certifikát nastaven, pak by vaše aplikace neměla serveru důvěřovat.

Pro usnadnění tohoto procesu jsou servery často konfigurovány s certifikáty od známých certifikačních autorit (CA). Od úrovně API 17 podporuje Android přes 100 CA, které jsou aktualizovány s každým vydáním. Při vydávání certifikátu pro server certifikační autorita podepíše certifikát serveru pomocí svého soukromého klíče a klient pak může ověřit, že certifikát je vydán certifikační autoritou, která je platformou Android známá a důvěryhodná.

Pokud vaše aplikace komunikuje s webovým serverem, který má certifikát vydaný důvěryhodnou certifikační autoritou, můžete požádat o několik řádků kódu:

URL url = nová URL („https://www.google.com“); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection (); urlConnection.connect (); InputStream in = urlConnection.getInputStream ();

Existují však některé scénáře, kdy výše uvedený kód povede k výjimce:

  • CA, která vydala certifikát serveru, není známa. V tomto scénáři můžete naučit HttpsURLConnection důvěřovat této sadě CA.
  • Certifikát serveru byl podepsán sám sebou, což znamená, že server funguje jako vlastní CA. U certifikátů s vlastním podpisem si můžete vytvořit svůj vlastní TrustManager, musíte však zajistit, aby váš certifikát s vlastním podpisem obsahoval silný klíč.
  • V konfiguraci serveru chybí zprostředkující CA. Mnoho veřejných certifikačních autorit nepodepisuje serverové certifikáty přímo. Android věří pouze kořenovým certifikačním úřadům, takže server bude muset odeslat řetězec certifikátů ze serverového CA prostřednictvím všech meziproduktů potřebných k dosažení kořenového adresáře. Pokud nemůžete nakonfigurovat server tak, aby zahrnoval zprostředkující certifikační autoritu do řetězce serverů, pak je jedním z možných řešení vytvoření vlastního TrustManageru.

Vytvoření konfiguračního souboru zabezpečení sítě: Důvěryhodnost vlastních certifikačních autorit

Pokud chcete, aby vaše aplikace používala novou nebo vlastní certifikační autoritu, měli byste vytvořit konfigurační soubor zabezpečení sítě, ve kterém zadáte nastavení zabezpečení sítě.

Vytvoření konfiguračního souboru zabezpečení sítě:

  • Pokud váš projekt již neobsahuje složku XML, musíte ji vytvořit. Control-klikněte na složku res projektu a vyberte Nový> Android Resource Directory.
  • Vytvořte nový soubor prostředků XML v adresáři XML, který bude sloužit jako váš konfigurační soubor zabezpečení sítě. Pojmenuji tento soubor network_config.
  • Otevřete konfigurační soubor sítě a určete, že veškerý přenos do následujících domén by měl používat protokol HTTPS:

// Zakázat čistý text // // Použít toto pravidlo na doménu a všechny její subdomény // my.domain.com ... ... ...

Nyní můžete určit sadu vlastních CA, kterým by vaše aplikace měla důvěřovat. Pokud se například chcete připojit k hostiteli, který používá certifikační autoritu s vlastním podpisem, do souboru konfigurace zabezpečení sítě byste přidali následující položky:

my.domain.com // Sada důvěryhodných kotev pro zabezpečená připojení // // Sada certifikátů pro elementy trust-anchors a zdroj těchto certifikátů //

Nezapomeňte deklarovat soubor konfigurace zabezpečení sítě ve svém manifestu:

Poté budete muset přidat důvěryhodné CA do res / raw / trusted_cas projektu ve formátu PEM nebo DER.

V případě potřeby důvěřujte dalším CA

Nakonec možná budete chtít důvěřovat dalším CA, které platforma Android nezná. Chcete-li zvýšit počet certifikačních autorit, kterým vaše aplikace důvěřuje, musíte zadat více zdrojů certifikátů:

Nikdy neposílejte citlivá data prostřednictvím SMS

Pokud potřebujete přenášet data ze serveru do aplikace, měli byste používat zprávy Google Cloud Messaging (GCM) a IP, a nikdy nešifrovaný protokol SMS.

Přečtěte si také: Vývoj Android: Jak volat, přijímat SMS a získávat kontakty uživatelů

Nikdy byste neměli provádět citlivé příkazy pomocí SMS, protože SMS jsou přenášeny jako vysílací záměry, což znamená, že každá aplikace s povolením READ_SMS bude mít přístup k jejich obsahu.

Chraňte před bezpečnostními hrozbami pomocí rozhraní API SafeNet

SafetyNet poskytuje sadu služeb a rozhraní API, které můžete použít k ochraně vaší aplikace před bezpečnostními hrozbami, jako jsou neoprávněné zásahy do zařízení, škodlivé adresy URL a falešní uživatelé.

Android podporuje následující API SafeNet:

  • SafetyNet Attestation API. Toto rozhraní proti zneužití vám umožňuje přístup k zařízení Android, na kterém je spuštěna vaše aplikace, takže můžete určit, zda vaše servery komunikují se skutečným zařízením.
  • SafetyNet Safe Browsing API. Pomocí tohoto rozhraní API můžete určit, zda Google klasifikovala konkrétní adresu URL jako známou hrozbu.
  • SafetyNet reCAPTCHA API. Tato služba obsahuje rozhraní reCAPTCHA API, které můžete použít k ochraně své aplikace před hrozbami, jako je spam nebo škodlivý provoz. Pokud má API podezření, že vaše aplikace interaguje s robotem, zobrazí se CAPTCHA, kterou musí příjemce vyřešit, než může pokračovat v používání aplikace.
  • SafetyNet Verify Apps API. Pokud vaše aplikace obsahuje citlivá uživatelská data, můžete pomocí tohoto rozhraní API interagovat s funkcí Ověřování aplikací zařízení a zkontrolovat, zda zařízení neobsahuje škodlivé aplikace. Pokud zařízení není zabezpečené, můžete určitým omezením poškození zakázat všechny citlivé funkce aplikace. Uvědomte si však, že ačkoli SafetyNet upozorní uživatele na potenciálně škodlivé aplikace, které objevuje, neexistuje žádná záruka, že uživatel tyto aplikace skutečně odinstaluje. Kromě toho se neustále vydávají škodlivé aplikace a hackeři neustále přicházejí s novými a důmyslnými způsoby, jak proklouznout pod radar, takže i když zařízení vyhovuje testu SafetyNet, neměli byste předpokládat, že na něm nejsou žádné škodlivé aplikace zařízení.

Další informace o rozhraních SafetyNet API včetně pokynů, jak je používat v aplikacích, naleznete v oficiálních dokumentech pro Android.

Pro citlivé transakce použijte Android Protected Confirmation

Pokud vaše aplikace potřebuje provést citlivou transakci, například provést platbu, můžete na zařízeních se systémem Android 9 (úroveň API 28) nebo vyšší použít potvrzení chráněné Androidem.

Pokaždé, když se uživatel pokusí dokončit citlivou transakci, zobrazí Android Protected Confirmation výzvu, aby přijala krátký výpis. Pokud uživatel toto prohlášení schválí, můžete podepsat pomocí klíče z úložiště klíčů Android.

Další informace a pokyny k implementaci chráněného potvrzování Androidu naleznete v oficiálních dokumentech pro Android.

Android 10: Přímo spusťte zabudovaný kód DEX

Na zařízeních se systémem Android 10 (API level 29) a vyšším je možné spustit vložený kód DEX přímo ze souboru APK vaší aplikace, což může zabránit útoku, i když se hackerovi podaří manipulovat s místně kompilovaným kódem zařízení.

Přečtěte si také: Prozkoumání systému Android Q: Přidání bublinových oznámení do aplikace

Chcete-li tuto novou funkci zabezpečení povolit, otevřete manifest projektu a do prvku přidejte následující:

Dále budete muset vytvořit soubor APK obsahující nekomprimovaný kód DEX, ke kterému má ART přístup přímo. Otevřete soubor build.gradle a přidejte následující:

aaptOptions {noCompress dex}

Uvědomte si, že ART použije kompilátor JIT při spuštění aplikace, což může mít vliv na výkon vaší aplikace.

Zabalení

V tomto článku jsme se zabývali všemi osvědčenými postupy, nástroji, API a technikami, které můžete použít k udržení zabezpečení aplikací pro Android.

Máte nějaké rady ohledně zvýšení bezpečnosti vaší aplikace? Nezapomeňte se podělit o své tipy v komentářích níže!

Tento kvíz obahuje deet obrázků zobrazujících různé telefony Huawei a Honor. Vaším úkolem je podívat e na každý obrázek a zjitit název luchá...

Huawei a její značka Honor nedávno vydala tikovou zprávu, která tanoví oběma polečnotem několik cílů. Zatímco Huawei znovu potvrdil vůj cíl být výrobc...

Zajímavé Na Místě