Android 9 y las restricciones HTTP

Ignacio Buioli
- 10/16/2019 - 2 min. de lectura

Las medidas de seguridad en Web y Apps pasan ya el nivel del absurdo. Me dirán que exagero, que es mejor tener un sistema sólido que vulnerable, y estoy completamente de acuerdo con eso. Pero en una internet donde ya tenemos HTTPS, CORS, CORB, mil y una políticas de seguridad al nivel de lo injustificable, cada vez que se agrega un bloqueo de contenido nuevo parece que nos están tomando el pelo. No pasaron años entre cada nueva medida de seguridad, pasan pocos meses, semanas incluso. Y, sin embargo, voy a tratar de ser razonable y pensar que la Web no se hizo bien en un inicio, y este será el precio a pagar hasta que tengamos una web con las medidas de seguridad adecuada. Uno pensaría que en sistemas Android, donde existen los manifiestos (algo que deberían pensar implementar en cierto tipo de WebApp) los problemas de seguridad son cosas del pasado, y es un entorno de desarrollo maravilloso. ¡Claro que si! ¡El festival del humor! Nada más lejos de la realidad, y lo más reciente en materia de seguridad son los bloqueos HTTP.

Brevemente, me ocurrió desarrollando una Odoo App personalizada, la cual había pasado su etapa final de testeo en localhost y estaba siendo testeada en los dispositivos que posee Moldeo Interactive. Huawey Y6 (Android 5.0), Moto C Plus (Android 7.0), TCL 5133A (Android Go 8.1.0), y otros dispositivos menores. En todos la conexión a la Odoo App mediante los Frames y mediante conexión RPC funcionaba perfectamente. No vamos a engañarlos, no vamos tan rápido actualizando dispositivos y -de momento- no tenemos ningún Android 9. Tal fue nuestra sorpresa al enterarnos, y confirmarlo posteriormente con Emuladores, que al intentar conectarse a una IP con un Odoo en Android 9 salía este error:

ERR_CLEARTEXT_NOT_PERMITED

Investigando un poco encontramos la increible "alinación de planetas" que se produjo. Hace poco actualizamos la versión de Apache Cordova a la versión 8.0.0 que es la que introduce el nuevo API de Android. A esto se le sumó que los dispositivos donde iba a utilizarse la Odoo App eran todos muy nuevos, Android 9. Y acá está el problema, tiene bloqueado los pedidos por HTTP en esta versión. Una solución ideal es utilizar HTTPS, cosa sumamente recomendable por múltiples mótivos, pero no nos engañemos, no vivimos en un mundo ideal. Y si hablamos de implementaciones de Odoo esto se multiplica, porque hay muchas que se hacen sobre una IP. Entonces no podemos depender de instalar un certificado HTTPS, porque además se necesita un dominio. Por lo tanto, ¿cómo resolvemos esto? En Android 9 la "comunicación limpia" está deshabilitada por defecto (algo que antes teníamos que habilitar para hacer que nuestra App sea "segura", cosa lógica). Asi que tenemos que habilitarla editando nuestro config.xml:

<platform name="android">
    <edit-configfile="app/src/main/AndroidManifest.xml"mode="merge"target="/manifest/application">
        <applicationandroid:usesCleartextTraffic="true"/>
    </edit-config>
</platform>

Y, como paso extra, es necesario asegurarse que la tag widget está bien configurada, esta sería la configuración correcta:

<widget id="app-id"version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">

Así si, funcionará. La pregunta es, ¿era necesario? La seguridad de la App debería depender de los desarrolladores y no de quienes arman la plataforma, pero bueno, así están las cosas. Otro detalle más de seguridad que recordar.



Acerca de:

Ignacio Buioli

Degree on Multimedia Arts. He has developed numerous Multimedia projects as well as written articles and translated texts of the mentioned subject. In Moldeo Interactive, He is a Partner and Programmer; also taking care of a large part of the online networks and courses.