Distributor: Error de autorización // Truncar URL de referencia

Creado en 24 jun. 2019  ·  7Comentarios  ·  Fuente: 10up/distributor

Describe el error

El distribuidor genera algunas URL grandes que incluyen listas de publicaciones potencialmente largas en la cadena de consulta de la URL. WP incluye la URL completa como Referrer en el encabezado de las solicitudes salientes. Con URL lo suficientemente largas (~ 8k + caracteres UTF-8), esto invalidará los encabezados con servidores configurados con un límite de tamaño de 8 kb para los encabezados, como sucedió en nuestro caso ( wamu.org ). Los encabezados se distorsionan y, dado que autorizan datos, esto finalmente hace que la autorización falle.

Pasos para reproducir

  1. Inicie sesión en un sitio de WP con Application Passwords y Distributor instalados.
  2. Haga clic en Extraer contenido.
  3. Elija una conexión externa configurada con un usuario con créditos generados por la contraseña de la aplicación en el menú desplegable Pull Content from .
  4. Seleccione un tipo de publicación en el menú desplegable junto al botón de filtro, donde el tipo de publicación es uno que se ha extraído con frecuencia (esto es importante porque creo que afecta el tamaño de la URL, específicamente una lista de publicaciones para excluir en la cadena de consulta ).
  5. Haga clic en filtro.
  6. El mensaje de error Could not pull content from connection due to error.

Comportamiento esperado
Los encabezados no deben tener la URL completa para que no se distorsionen.

Capturas de pantalla

Información medioambiental

  • Dispositivo: MacBook Pro (13 pulgadas, 2018, cuatro puertos Thunderbolt 3)
  • Sistema operativo: MacOS 10.14.3
  • Navegador y versión: Chrome 74.0.3729.169
  • Versión de distribuidor: 1.4.1
  • Tema y versión: 3.0.28
  • Otros complementos y versiones instalados:

Contexto adicional

Solución propuesta: truncar la URL de referencia ...

add_action('http_api_curl', function($handle, $request_args, $url) {
    if (strpos($url, "wp-json/wp/v2/wamu_story") !== false || strpos($url, "wp-json/wp/v2/posts") !== false) {
        curl_setopt($handle, CURLOPT_REFERER, site_url());
    }
}, 10, 3);
bug

Todos 7 comentarios

@superbuggy ¡ bienvenido al Distribuidor y gracias por los comentarios! Lo etiquetaré para que lo revisemos durante nuestra próxima versión 1.5.0, así que estad atentos para recibir una actualización.

@dkotter, ¿hay alguna posibilidad de que sus mejoras en la página de

Gracias @superbuggy - Creo que definitivamente tiene sentido truncar la URL de referencia / referencia por ahora, estoy investigando si es mejor volver a la URL del sitio o usar la URL de la página de administración actual. También me encantaría su opinión sobre si a largo plazo sería mejor dejar de insertar publicaciones excluidas en la cadena de consulta (dejando la funcionalidad real intacta) y referirse a una opción almacenada en su lugar.

Después de profundizar un poco más en esto con la ayuda de $this->sync_log = range( 0, 400 ) en PullListTable::prepare_items() . Necesitamos arreglar esto, ya que es muy fácil ingresar a los varios cientos de publicaciones extraídas, y si seguimos de esta manera, vamos a desencadenar un error fatal con post max vars. No quiero eliminar esta variable por completo, ya que las publicaciones ya extraídas no se excluirán, pero realmente no veo una solución perfecta. Hay dos cosas que podríamos intentar hacer aquí que creo que son las mejores:

  1. Para 1.5, trunque $sync_log en el método anterior a un número arbitrario (¿tal vez 200?) Para que, con suerte, al menos las primeras páginas de contenido que se extraerán sigan siendo precisas, y luego cualquier cosa pasada que aparezca atenuada en el lista de la tabla (en comparación con el registro de sincronización local) para que la paginación aún sea correcta. De lo contrario, corre el riesgo de tener una página con un número notablemente menor de elementos que las publicaciones por página, o incluso ninguno, lo que seguramente generaría confusión en el usuario. Creo que es una UX razonable dado que estamos hablando de retroceder bastante en la paginación en el estado predeterminado: los resultados de búsqueda mostrarían filas atenuadas antes, pero mientras no las hagamos disponibles para extracción, creo que es okey.

  2. Para una versión futura (1.6 o 2.0 tal vez), consulte cómo almacenar el registro de sincronización en el sitio remoto (si aún no lo estamos) para conexiones autenticadas y usarlo para devolver resultados. Supongo que tendríamos que almacenarlo en opciones con un hash de la URL del sitio remoto o algo así. Para las conexiones no autenticadas, aún recurrimos a la solución original.

¿Alguna idea / objeción? Trabajando en un PR ahora.

@superbuggy Abrí el # 431 para abordar esto, si puedes echar un vistazo y dar una opinión sobre el enfoque y / o los resultados de la interfaz de usuario y cómo eso te afecta.

Volviendo con más diligencia debida antes de fusionar # 431 en, con @cmmarslender en la asistencia, parece ser un problema de 414 Request-URI Too Large , no un problema de tamaño de encabezado. Ninguno de nosotros pudo reproducir ningún encabezado enviado además del de autenticación. Todavía estoy feliz de ayudar a perseguir los problemas de los referentes si desea conectarse directamente (Slack, o lo que sea) sobre errores específicos que ha visto por su parte, pero por ahora creo que mi PR es de hecho la solución correcta de la primera fase.

¡Suena bien! En nuestro caso, acabo de agregar en el bloque de código anterior a functions.php para nuestro tema principal como revisión. Soy principalmente un desarrollador de JS y soy más nuevo en WP, por lo que todavía no tengo una comprensión detallada de bajo nivel sobre cómo WP usa las URL de referencia, pero ese problema de 414 tiene mucho sentido dada mi comprensión del problema que encontramos. Como medida adicional, terminamos simplemente cambiando nuestra configuración de NGINX para permitir que los encabezados suban 32k.

La historia de la lista de exclusión de publicaciones en el control remoto también tiene sentido para mí. Parece intuitivo que un sitio deba realizar un seguimiento de las publicaciones que ya ha incluido. ¿Esto podría almacenarse en la tabla de opciones, tal vez?

¡Gracias por sus respuestas!

¿Fue útil esta página
0 / 5 - 0 calificaciones