Android 9-ൽ HTTP-യിൽ Expo ആപ്പ് പരാജയപ്പെടുന്നു: കാരണം cleartext ആണ്, VPN അല്ല
സാധാരണ HTTP API വിളിക്കുന്ന Expo ബിൽഡ് Android 9-ലും അതിനുശേഷവും പരാജയപ്പെടുന്നു. ടണൽ കുറ്റമറ്റതാണ്: cleartext ഫ്ലാഗ് ബിൽഡ് കോൺഫിഗിൽ വേണം.
നിങ്ങൾ പുതിയ ബിൽഡ് ഇറക്കി, VPN-ലേക്ക് മാറി, അതേ സ്ക്രീൻ ലോഡ് ചെയ്യുന്നത് നിന്നു. Android 9-ലും അതിനുശേഷവും കൂടുതൽ സാധാരണമായ വിശദീകരണം കൂടുതൽ വിരസമാണ്: API 28 അല്ലെങ്കിൽ അതിലധികം ലക്ഷ്യമിടുന്ന ആപ്പുകൾക്ക് പ്ലാറ്റ്ഫോം സാധാരണ HTTP നിരസിക്കുന്നു, VPN അത് വെളിപ്പെടുത്താൻ മതിയായ പശ്ചാത്തലം മാത്രമാണ് മാറ്റിയത്. നിങ്ങൾ കാണുന്ന പിശക് HTTP ക്ലയന്റിനെ ആശ്രയിച്ചിരിക്കുന്നു, അതുകൊണ്ടാണ് അത് cleartext എന്ന് വളരെ അപൂർവമായി പറയുന്നത്.
ഈ പരാജയം യഥാർത്ഥത്തിൽ എന്താണ്
Android 9 മുതൽ ആപ്പ് API ലെവൽ 28 അല്ലെങ്കിൽ അതിലധികം ലക്ഷ്യമിട്ടാൽ പ്ലാറ്റ്ഫോം സ്വതവേ cleartext തടയുന്നു. സാധാരണ HTTP വിലാസത്തിലേക്കുള്ള അഭ്യർത്ഥന ഒരു പാക്കറ്റ് പോലും ഉപകരണം വിടുന്നതിന് മുമ്പ് പ്ലാറ്റ്ഫോം നിരസിക്കുന്നു. ഏത് പിശക് കാണുന്നു എന്നത് HTTP ലൈബ്രറിയെ ആശ്രയിച്ചിരിക്കുന്നു: ചിലപ്പോൾ പൊതുവായ നെറ്റ്വർക്ക് പരാജയം, ചിലപ്പോൾ സമയപരിധി, ചിലപ്പോൾ cleartext നേരിട്ട് പേരിടുന്ന സന്ദേശം. അത് ഒരിക്കലും ചെയ്യാത്തത് നിങ്ങളുടെ സെർവറിൽ എത്തുന്നതാണ്. Android സ്വതവവും ഡൊമെയ്ൻ പരിമിതമായ ബദലും തന്റെ സുരക്ഷാ കോൺഫിഗറേഷൻ ഗൈഡിൽ രേഖപ്പെടുത്തിയിട്ടുണ്ട്.
അതേ ഉപകരണത്തിലെ ബ്രൗസർ ഇപ്പോഴും പേജ് ലോഡ് ചെയ്യാൻ കഴിയും, മിക്ക ആളുകളും നഷ്ടപ്പെടുത്തുന്ന സൂചന അതാണ്. ബ്രൗസറുകൾ നിങ്ങളുടെ ആപ്പിന്റെ നെറ്റ്വർക്ക് സുരക്ഷാ നയത്തിന് വിധേയമല്ല.
എന്തുകൊണ്ട് VPN കുറ്റപ്പെടുന്നു
സാധാരണയായി മൂന്ന് കാര്യങ്ങൾ ഒരുമിച്ച് മാറുന്നു. VPN കണക്ട് ചെയ്ത ശേഷം ആപ്പ് മറ്റൊരു ഹോസ്റ്റ്നെയിം റിസോൾവ് ചെയ്തേക്കാം, ഉപകരണം പുതിയതും പുതിയ ബിൽഡുള്ളതുമാകാം, അല്ലെങ്കിൽ ബിൽഡ് തന്നെ സ്വതവം സജീവമാക്കുന്ന ലക്ഷ്യ API ലെവലിലേക്ക് മാറിയിരിക്കാം. VPN കാണാം, ലക്ഷ്യ SDK കാണില്ല, അതിനാൽ ടിക്കറ്റ് VPN-ന് ലഭിക്കുന്നു.
നെറ്റ്വർക്ക് കോൺഫിഗിൽ തൊടുന്നതിന് മുമ്പ് പഴയതും പുതിയതുമായ ബിൽഡുകളുടെ ലക്ഷ്യ ലെവലുകൾ താരതമ്യം ചെയ്യുക. 27 അല്ലെങ്കിൽ അതിൽ കുറവ് ലക്ഷ്യമിടുന്ന ആപ്പ് ഒഴിവാക്കപ്പെട്ടിരിക്കുന്നു, «എന്റെ പഴയ ഫോണിൽ ഇത് പ്രവർത്തിക്കുന്നു» എന്ന ഓരോ റിപ്പോർട്ടും ഇത് വിശദീകരിക്കുന്നു.
Expo ഫ്ലാഗ് യഥാർത്ഥത്തിൽ എവിടെ വീഴുന്നു
മാനേജ്ഡ് Expo പ്രോജക്ടിൽ app.json-ൽ ഒരു ക്രമീകരണം ചേർക്കുന്നത് Android മാനിഫെസ്റ്റ് എഡിറ്റ് ചെയ്യുന്നില്ല, കാരണം മാനിഫെസ്റ്റ് നിർമ്മിക്കുന്നത് prebuild-ഉം ഡെവലപ്മെന്റ് ബിൽഡുകളുമാണ്. ആ ഘട്ടത്തിൽ ക്രമീകരണം എഴുതുന്നത് കോൺഫിഗ് പ്ലഗിൻ ആണ്. പിന്തുണയ്ക്കുന്ന വഴി expo-build-properties ആണ്, ഇത് ആപ്പ് കോൺഫിഗിൽ android-ന് കീഴിൽ cleartext ഓപ്ഷനോടെ കോൺഫിഗർ ചെയ്യുന്നു.
{
"plugins": [
["expo-build-properties", {
"android": { "usesCleartextTraffic": true }
}]
]
}സ്നിപ്പെറ്റ് പ്ലഗിൻ ഓപ്ഷൻ മാത്രം സെറ്റ് ചെയ്യുന്നു; മാനിഫെസ്റ്റ് പിന്നീട് നിർമ്മിക്കുന്നു. ഒരു prebuild അല്ലെങ്കിൽ പുതിയ ഡെവലപ്മെന്റ്-ക്ലയന്റ് ബിൽഡ് പ്രവർത്തിപ്പിക്കുക, തുടർന്ന് വീണ്ടും പരിശോധിക്കുന്നതിന് മുമ്പ് നിർമ്മിച്ച AndroidManifest.xml-ൽ android:usesCleartextTraffic ഉണ്ടോ എന്ന് പരിശോധിക്കുക, കാരണം JS മാത്രം റീലോഡ് ചെയ്താൽ പഴയ മാനിഫെസ്റ്റ് നിലനിൽക്കും. പ്ലഗിൻ പതിപ്പ് പ്രോജക്ട് പ്രവർത്തിക്കുന്ന Expo SDK-യുമായി യോജിപ്പിക്കുക. പ്ലഗിൻ ഓപ്ഷനുകൾ റിലീസുകൾക്കിടയിൽ മാറുന്നു, മറ്റൊരു SDK-യിൽ നിന്ന് പകർത്തിയ സ്നിപ്പെറ്റ് നിശബ്ദ നിഷ്ക്രിയതയുടെ വിശ്വസനീയമായ ഉറവിടമാണ്.
Bare പ്രവാഹവും കൂടുതൽ ഇടുങ്ങിയ ഓപ്ഷനും
bare React Native-ന് തുല്യമായത് application എലമെന്റിൽ android:usesCleartextTraffic, അല്ലെങ്കിൽ പേരിട്ട ഡൊമെയ്നുകൾക്ക് മാത്രം cleartext അനുവദിക്കുന്ന നെറ്റ്വർക്ക് സുരക്ഷാ കോൺഫിഗ് ആണ്. ഡൊമെയ്ൻ പരിമിതമായ രൂപമാണ് തിരഞ്ഞെടുക്കേണ്ടത്, കാരണം അത് ആന്തരിക API അനുവദിക്കുകയും ബാക്കിയെല്ലാം HTTPS-ൽ നിർത്തുകയും ചെയ്യുന്നു. അത് സ്വന്തം ഒഴിവാക്കൽ പട്ടികയും രേഖപ്പെടുത്തുന്നു, അവലോകകൻ ചോദിക്കുന്നത് അതേ ഭാഗത്തെക്കുറിച്ചാണ്.
രണ്ട് സമീപനങ്ങളിൽ ഒന്നും നിങ്ങൾ പേരിടാത്ത ഒന്നിനും പ്ലാറ്റ്ഫോമിന്റെ സ്വതവം മാറ്റുന്നില്ല.
ആദ്യം ഉപകരണ ലോഗിൽ നിന്ന് തെളിയിക്കുക
കോൺഫിഗ് എഡിറ്റ് ചെയ്യുന്നതിന് മുമ്പ് കൃത്യമായ പരാജയം നേടുക. ബന്ധിപ്പിച്ച ഉപകരണത്തിൽ adb logcat പ്ലാറ്റ്ഫോമിന്റെ cleartext നിരസിക്കൽ കാണിക്കുകയും അത് ഉയർത്തിയ ഘടകം പേരിടുകയും ചെയ്യുന്നു. നിരസിക്കപ്പെട്ട സോക്കറ്റ്, റിസോൾവ് ചെയ്യാത്ത പേര് അല്ലെങ്കിൽ പരാജയപ്പെട്ട TLS ഹാൻഡ്ഷേക്ക് തികച്ചും വേറെയെങ്ങോട്ടാണ് സൂചിപ്പിക്കുന്നത്, cleartext പ്രവർത്തനക്ഷമമാക്കുന്നത് ആപ്പിനെ വെറുതെ ദുർബലമാക്കും.
തുടർന്ന് പ്രൊഡക്ഷൻ സത്യസന്ധമായി നിലനിർത്തുക. TLS നൽകാൻ കഴിയാത്ത ലാബ് എൻഡ്പോയിന്റിന് cleartext സ്വീകാര്യമാണ്, നിങ്ങൾക്ക് ഷെഡ്യൂൾ ചെയ്യാൻ കഴിയുന്ന ഏറ്റവും ചെറിയ സമയത്തിന് മാത്രം. API-ക്ക് സ്വകാര്യ നെറ്റ്വർക്കിനുള്ളിൽ TLS അവസാനിപ്പിക്കാൻ കഴിയുമെങ്കിൽ, സർട്ടിഫിക്കറ്റ് ഉപകരണത്തിന്റെ ട്രസ്റ്റ് സ്റ്റോറിൽ വയ്ക്കുകയും cleartext നിഷ്ക്രിയമായി വയ്ക്കുകയും ചെയ്യുക, കാരണം ടണൽ അതിന്റെ പുറത്തേക്കുള്ള വഴിവരെ മാത്രം എൻക്രിപ്റ്റ് ചെയ്യുന്നു, അതിനപ്പുറം ഒന്നുമല്ല.
എൻഡ്പോയിന്റ് HTTPS-ൽ ഉത്തരം നൽകിയാൽ, അനുമതി നീക്കം ചെയ്യുക, വീണ്ടും ബിൽഡ് ചെയ്യുക, അതേ സെഷനിൽ VPN-ലും സാധാരണ Wi-Fi-ലും പരിശോധിക്കുക. പേര് റിസോൾവിംഗ് ഈ രണ്ട് വഴികളിൽ വ്യത്യാസപ്പെടാം, ഏതാണ് സത്യം പറയുന്നതെന്ന് ആ ജോഡി മാത്രമേ പറയൂ.