Non consentire la serializzazione di ResourceResolver tramite Sling Model Exporter disallow-the-serialization-of-resourceresolvers-via-sling-model-exporter

La funzione Sling Model Exporter consente di serializzare gli oggetti Sling Models in formato JSON. Questa funzione è ampiamente utilizzata in quanto consente all’SPA (applicazioni a pagina singola) di accedere facilmente ai dati dell’AEM. Sul lato dell’implementazione, per serializzare questi oggetti viene utilizzata la libreria Jacson Databind.

La serializzazione è un'operazione ricorsiva. Partendo da un "oggetto principale", esegue un'iterazione ricorsiva in tutti gli oggetti idonei e serializza questi e i relativi elementi secondari. Puoi trovare una descrizione dei campi serializzati in questo articolo.

Questo approccio serializza tutti i tipi di oggetti in JSON e naturalmente può anche serializzare un oggetto Sling ResourceResolver, se è coperto dalle regole di serializzazione. Si tratta di un problema, in quanto il servizio ResourceResolver (e quindi anche l'oggetto del servizio che lo rappresenta) contiene informazioni potenzialmente riservate che non devono essere divulgate. Ad esempio:

  • ID utente
  • Percorsi di ricerca per risolvere i percorsi relativi
  • propertyMap.

Particolarmente sensibile è propertyMap (consulta la documentazione API di getPropertyMap), in quanto si tratta di una struttura di dati interna che può essere utilizzata per molti scopi, ad esempio per memorizzare in cache oggetti che condividono lo stesso ciclo di vita di ResourceResolver. La serializzazione di questi può causare la perdita di dettagli sull’implementazione e potenzialmente avere un impatto sulla sicurezza, in quanto vengono esposti dati che non dovrebbero essere leggibili e accessibili a un utente finale. Per questo motivo ResourceResolvers non deve essere serializzato in JSON.

Adobe prevede di disabilitare la serializzazione di ResourceResolvers in un approccio in due fasi:

  1. A partire dalla 14697 sulla versione di AEM as a Cloud Service, ogni volta che un AEM ResourceResolver viene serializzato verrà registrato un messaggio di avviso. Tutti i clienti sono invitati a controllare i registri dell’applicazione per individuare queste istruzioni di registro e ad adattare di conseguenza la base di codice.
  2. In un Adobe successivo, la serializzazione di ResourceResolvers come JSON verrà disabilitata.

Implementazione implementation

Il messaggio WARN viene registrato sia nelle istanze AEM as a Cloud Service che nell’SDK AEM locale e si presenta così:

[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.

Questo messaggio di registro indica che durante il processo di serializzazione di /content/…/page in JSON un ResourceResolver è già serializzato. Richiedendo /content/../page.model.json è possibile verificare esattamente dove vengono visualizzati i campi di ResourceResolver e utilizzarli per identificare la classe del modello Sling che attiva effettivamente questo comportamento.

NOTE
È stato verificato che i Componenti core AEM non sono interessati da questo problema.

Azione richiesta requested-action

Adobe richiede a tutti i clienti di controllare i registri applicazioni e le basi di codice per verificare se sono interessati da questo problema e di modificare l’applicazione personalizzata, se necessario, in modo che questo messaggio di AVVERTENZA non venga più visualizzato.

Si presume che nella maggior parte dei casi queste modifiche richieste siano dirette, in quanto gli oggetti ResourceResolver non sono affatto necessari nell'output JSON, in quanto le informazioni in essi contenute normalmente non sono richieste dalle applicazioni front-end. Ciò significa che nella maggior parte dei casi dovrebbe essere sufficiente escludere l'oggetto ResourceResolver dall'essere considerato da Jackson (vedi le regole).

Nel caso in cui un modello Sling sia interessato da questo problema ma non modificato, la disabilitazione esplicita della serializzazione dell'oggetto ResourceResolver (come eseguito da Adobe come secondo passaggio) applicherà una modifica nell'output JSON.

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