react / react/react-native

Commas in cookie value not parsed correctly on Android

Abierto
#29,916 12 comentarios 7 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Needs: Triage :mag: Never gets stale Platform: Android Platform: Linux
Lenguaje dominante
C++
Estrellas
127k
Forks
25.3k
Merge medio
1 d 23 h
PR fusionados (30 d)
4

Descripción

Description

tl;dr Commas are treated as cookie deliminators on Android only

Commas (,) in cookie values are not allowed as part of the cookie specification but they're still allowed on all major browsers and through iOS's networking APIs. However in Android okhttp (specifically okhttp3.JavaNetCookieJar) commas are treated as cookie delimiters in the same way that semicolons are. This behaviour isn't mentioned anywhere and is inconsistent with iOS/Web.

I have found an existing issue on okhttp which suggests the regular CookieJar doesn't have this limitation and should be used instead of JavaNetCookieJar. I can also confirm that removing the comma here fixes the issue. React Native sets the okhttp cookie jar to JavaNetCookieJar here.

I'm working with an external service which I can't control so changing the cookie isn't an option. Because {redirect: "manual"} doesn't work in React Native iOS/Android, it's impossible to override this behaviour if the cookie is set in a 302 response and required for subsequent responses.

React Native version:

System:
    OS: Linux 5.3 Linux Mint 19.1 (Tessa)
    CPU: (4) x64 Intel(R) Core(TM) m3-6Y30 CPU @ 0.90GHz
    Memory: 1.50 GB / 7.67 GB
    Shell: 4.4.20 - /bin/bash
  Binaries:
    Node: 10.15.0 - /usr/local/bin/node
    Yarn: Not Found
    npm: 6.4.1 - /usr/local/bin/npm
    Watchman: Not Found
  SDKs:
    Android SDK:
      Android NDK: 17.2.4988734
  IDEs:
    Android Studio: Not Found
  Languages:
    Java: 11.0.3 - /usr/bin/javac
    Python: 2.7.17 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: ~16.11.0 => 16.11.0 
    react-native: github:facebook/react-native#0.63-stable => 0.63.2 
  npmGlobalPackages:

Steps To Reproduce and expected results

If a fetch request is made to a server which responds with the following header:

Set-Cookie: TestCookie=a:hello,b:goodbye

On every platform apart from Android, the following Cookie header is sent in future requests:

Cookie: TestCookie=a:hello,b:goodbye;

but on Android the cookie is parsed incorrectly and the following header is sent (2 cookies):

Cookie: TestCookie=a:hello;b:goodbye=;

Snack, code example, screenshot, or link to a repository:

To easily reproduce this, run this express project https://gist.github.com/uen/f8bbded0fc10fd2d3910d388cd3fea6e and load snack https://snack.expo.io/8y09x_Bc7 on a real Android and iOS device (and web). The Android cookie will not be correct as described above

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java y el comportamiento referenciado de okhttp3 JavaNetCookieJar.kt. Ejecuta el proyecto de Express enlazado y Snack en Android, y compara el encabezado Cookie resultante con iOS y la web. Se considera terminado cuando las comas en los valores de las cookies permanecen intactas en Android, o cuando la limitación de la dependencia está claramente documentada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
android, react-native
Área
mobile, networking
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.