No permitir la serialización de ResourceResolvers mediante el exportador de modelos Sling disallow-the-serialization-of-resourceresolvers-via-sling-model-exporter

La función Exportador de modelos Sling permite serializar objetos de modelos Sling en formato JSON. SPA AEM Esta función se utiliza ampliamente, ya que permite a los usuarios de (aplicaciones de una sola página) acceder fácilmente a los datos de los usuarios de la página de inicio de sesión de la página de la página de inicio de sesión. En el lado de la implementación, la biblioteca Jacson Databind se utiliza para serializar estos objetos.

La serialización es una operación recursiva. Partiendo de un "objeto raíz", se repite recursivamente a través de todos los objetos aptos y los serializa a ellos y a sus elementos secundarios. Puede encontrar una descripción de los campos que se serializan en el artículo Jackson - Decidir qué campos se serializan/deserializan.

Este método serializa todos los tipos de objetos en JSON y, naturalmente, también puede serializar un objeto Sling ResourceResolver, si está cubierto por las reglas de serialización. Esto resulta problemático, ya que el servicio ResourceResolver (y, por lo tanto, también el objeto de servicio que lo representa) contiene información potencialmente confidencial, que no debería revelarse. Por ejemplo:

  • El ID de usuario
  • Las rutas de búsqueda para resolver las rutas relativas
  • El propertyMap.

Especialmente importante es propertyMap (consulte la documentación de la API de getPropertyMap), ya que es una estructura de datos interna que se puede usar para muchos fines, por ejemplo, para almacenar en caché objetos que comparten el mismo ciclo de vida que ResourceResolver. La serialización de estos datos puede filtrar detalles de implementación y tener un impacto potencial en la seguridad, ya que se exponen datos que no deberían ser legibles y accesibles para un usuario final. Por ese motivo ResourceResolvers no debe serializarse en JSON.

Adobe planea deshabilitar la serialización de ResourceResolvers en un enfoque de 2 pasos:

  1. A partir del 14697 de la versión de AEM as a Cloud Service AEM, cada vez que se serialice un ResourceResolver, se registrará un mensaje de advertencia. Se recomienda a todos los clientes que comprueben los registros de sus aplicaciones para ver si hay estas instrucciones de registro y adapten el código base en consecuencia.
  2. En un momento posterior, el Adobe deshabilitará la serialización de ResourceResolvers como JSON.

Implementación implementation

El mensaje ADVERTENCIA se registra en las instancias de AEM as a Cloud Service AEM y del SDK local de la aplicación y tiene el siguiente aspecto:

[127.0.0.1 [1705061734620] GET /content/../page.model.json HTTP/1.1] org.apache.sling.models.jacksonexporter.impl.JacksonExporter A ResourceResolver is serialized with all its private fields containing implementation details you should not disclose. Please review your Sling Model implementation(s) and remove all public accessors to a ResourceResolver.

Este mensaje de registro significa que durante el proceso de serialización de /content/…/page en JSON, ResourceResolver ya se ha serializado. Al solicitar /content/../page.model.json, puede comprobar dónde se muestran exactamente los campos de ResourceResolver y utilizarlos para identificar la clase del modelo Sling que activa este comportamiento.

NOTE
AEM Se ha validado que los componentes principales no se ven afectados por este problema.

Acción solicitada requested-action

Adobe solicita a todos sus clientes que comprueben los registros de sus aplicaciones y las bases de código para ver si se ven afectados por este problema y cambien la aplicación personalizada donde sea necesario, de modo que este mensaje ADVERTENCIA ya no aparezca.

Se supone que en la mayoría de los casos estos cambios requeridos son directos, ya que los objetos ResourceResolver no son necesarios en la salida JSON, ya que la información contenida allí normalmente no es requerida por las aplicaciones de front-end. Esto significa que, en la mayoría de los casos, debería ser suficiente excluir que Jackson considere el objeto ResourceResolver (consulte las reglas).

En caso de que el modelo Sling se vea afectado por este problema pero no se cambie, la deshabilitación explícita de la serialización del objeto ResourceResolver (ejecutado por el Adobe como segundo paso) aplicará un cambio en la salida JSON.

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab