Та шинэ build гаргаж, VPN руу шилжсэн ч мөнөөх дэлгэц ачааллахаа болив. Android 9 болон түүнээс дээш хувилбарт илүү түгээмэл тайлбар нь уйтгартай: платформ нь API 28 буюу түүнээс дээш түвшинг зорьсон аппуудад энгийн HTTP-г татгалздаг бөгөөд VPN нь үүнийг илрүүлэхэд хангалттай контекстийг л өөрчилсөн. Таны харж буй алдаа HTTP клиентээс хамаардаг тул cleartext гэж маш ховор хэлдэг.

Энэ бүтэлгүйтэл үнэндээ юу вэ

Android 9-өөс эхлэн апп API 28 буюу түүнээс дээш түвшинг зорьсон даруйд платформ cleartext-ийг анхдагчаар блоклодог. Энгийн HTTP хаяг руу хийсэн хүсэлтийг нэг ч пакет төхөөрөмжөөс гарахаас өмнө платформ татгалздаг. Ямар алдаа харах нь HTTP сангаас хамаарна: заримдаа ерөнхий сүлжээний алдаа, заримдаа хугацаа дуусах, заримдаа cleartext-ийг шууд нэрлэсэн мессеж. Түүний хэзээ ч хийдэггүй зүйл бол таны серверт хүрэх явдал. Android анхдагч зан төлөв болон домэйноор хязгаарласан хувилбарыг өөрийн аюулгүй байдлын тохиргооны гарын авлагад баримтжуулсан.

Мөн төхөөрөмж дээрх хөтөч хуудсыг ачаалж чаддаг хэвээр байгаа бөгөөд энэ нь ихэнх хүмүүсийн анзаардаггүй сэжүүр юм. Хөтөчүүд таны аппын сүлжээний аюулгүй байдлын бодлогод захирагдахгүй.

Яагаад VPN-ийг буруутгадаг вэ

Ихэвчлэн гурван зүйл нэгэн зэрэг өөрчлөгддөг. VPN холбогдсоны дараа апп өөр хост нэрийг шийдэж болно, төхөөрөмж шинэ бөгөөд шинэ build-тэй байж болно, эсвэл build өөрөө анхдагчийг идэвхжүүлдэг зорилтот API түвшин рүү шилжсэн байж болно. VPN харагдана, зорилтот SDK харагдахгүй тул тасалбарыг VPN авдаг.

Сүлжээний тохиргоог хүрэхээс өмнө хуучин болон шинэ build-ийн зорилтот түвшнийг харьцуул. 27 буюу түүнээс доош түвшинг зорьсон апп чөлөөлөгдөнө, энэ нь «хуучин утсан дээр ажилладаг» гэсэн бүх мэдээллийг тайлбарлана.

Expo-гийн туг үнэндээ хаана буудаг вэ

Удирдлагатай Expo төсөлд app.json-д тохиргоо нэмэх нь Android манифестийг засварладаггүй, учир нь манифестийг prebuild болон хөгжүүлэлтийн build-үүд үүсгэдэг. Тэр үе шатанд тохиргоог бичдэг нь конфигурацийн залгаас юм. Дэмжигдсэн зам нь expo-build-properties бөгөөд аппын тохиргоонд android-ийн доор cleartext сонголттойгоор тохируулна.

{
  "plugins": [
    ["expo-build-properties", {
      "android": { "usesCleartextTraffic": true }
    }]
  ]
}

Хэсэг нь зөвхөн залгаасын сонголтыг тогтоодог; манифест дараа нь үүсдэг. prebuild эсвэл шинэ development-client build ажиллуулаад, дахин туршихаас өмнө үүссэн 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-ээр хариулж эхэлмэгц зөвшөөрлийг авч, дахин build хийж, нэг сесс дотор VPN болон энгийн Wi-Fi дээр турш. Нэрийн шийдэл эдгээр хоёр замд өөр байж болох бөгөөд аль нь үнэнийг хэлж байгааг зөвхөн хос нь хэлнэ.

Холбоотой нийтлэлүүд