Modifiche all’iniezione del parametro del costruttore API REST di Adobe Commerce - Guida per gli sviluppatori di Merchant
Adobe Commerce e Magento Open Source hanno introdotto modifiche al modo in cui le API REST gestiscono l’iniezione dei parametri del costruttore. Questo aggiornamento rafforza il framework API web garantendo che solo i tipi di dati appropriati vengano utilizzati nelle richieste API. Questo articolo risponde anche a domande relative a CVE-2025-54236.
Descrizione description
Ambienti
Adobe Commerce / Magento Open Source 2.4.4+, 2.4.5+, 2.4.6+, 2.4.7+, 2.4.8+, 2.4.9-alpha3 (tutti i tipi di distribuzione)
Problema
Miglioramento della convalida del tipo di dati API di Adobe Commerce - Guida per gli sviluppatori di esercenti
Panoramica
Adobe Commerce e Magento Open Source hanno introdotto modifiche al modo in cui le API REST gestiscono l’iniezione dei parametri del costruttore. Questo aggiornamento rafforza il framework API web garantendo che solo i tipi di dati appropriati vengano utilizzati nelle richieste API. Questo articolo risponde anche a domande relative a CVE-2025-54236.
Novità
Sicurezza avanzata dei tipi nelle API Web
A partire da Adobe Commerce e Magento Open Source 2.4.4-p16, 2.4.5-p15, 2.4.6-p13, 2.4.7-p8, 2.4.8-p3 e 2.4.9-alpha3, il framework API Web ora implementa una convalida del tipo di dati più rigorosa per i parametri del costruttore nelle richieste API. Questa modifica garantisce che:
✅ I tipi di dati semplici (stringhe, interi, booleani) continuano a funzionare senza problemi.
✅ interfacce dati API (Api\Data\*Interface) rimangono completamente supportate.
Le classi di servizio 🚫 e i modelli complessi non vengono più creati automaticamente dai payload API.
Dettagli tecnici
Modifiche apportate
ServiceInputProcessor ora convalida i parametri del costruttore in modo più rigoroso durante l'elaborazione della richiesta API. Questo miglioramento introduce un livello di convalida che controlla i tipi di parametri prima di tentare la creazione di istanze di oggetti. Nello specifico, questa convalida si verifica nel metodo getConstructorData() quando il sistema tenta di popolare i parametri del costruttore dai dati del payload API. In precedenza, tutti i tipi di parametri venivano elaborati. Ora solo i tipi approvati sono consentiti tramite.
Tipi di dati consentiti
SUPPORTATO (nessuna modifica richiesta):
Tipi semplici
string- Valori di testo, nomi di prodotto, descrizioniint/integer- Valori numerici, quantità, IDfloat/double- Numeri decimali, prezzi, pesibool/boolean- Valori True/False, flag di stato
Interfacce dati API
- Tutti
*\Api\Data\*Interfaceclassi
Integrazioni potenzialmente interessate
Le integrazioni personalizzate che potrebbero richiedere una revisione includono:
1. Estensioni personalizzate e moduli di terze parti
- Estensioni che inviano parametri di costruzione non standard
- Moduli che utilizzano l’iniezione di oggetti complessi nei payload API
- Endpoint API personalizzati con strutture di parametri complesse
2. Verifica degli script
- Vari script di test con payload complessi
Risoluzione resolution
Guida alla migrazione
Controlla le chiamate API
Integrazioni correnti inventario:
- Documentazione delle chiamate API: Controlla tutti gli endpoint API documentati utilizzati dall'applicazione.
- Analisi archivio codici: Cercare nella base di codice le chiamate API con oggetti nidificati complessi.
- Analisi del traffico di rete: monitorare i payload API effettivi inviati a Magento.
- Revisione modulo di terze parti: verifica l'utilizzo delle API in tutte le estensioni installate.
Elenco di controllo per l'identificazione:
- Iniezione parametro costruttore: Cerca oggetti nidificati nei payload API.
- Tipi di oggetto complessi: Verificare la presenza di riferimenti a classi o servizi modello.
- Proprietà personalizzate: Identificare eventuali parametri API non standard.
- API specifiche per l'estensione: Rivedi le implementazioni API dei moduli personalizzati.
Risoluzione dei problemi
Messaggi di errore comuni
Nomi di campo non supportati per > 2.4.6
{ "message": "\"{fieldName}\" is not supported. Correct the field name and try again." }
Nomi di campo non supportati per < =2.4.6
{ "message": "Property \"{fieldName}\" does not have accessor method \"{methodName}\" in class \"{className}\"." }
In questo caso:
- I parametri di costruzione che utilizzano tipi complessi vengono rifiutati.
Passaggi del debug
1. Controllare i registri API in modalità non sviluppatore (per < =2.4.6).
- Percorso:
var/log/exception.log - Filtro: cerca
ServiceInputProcessorvoci. - Analisi: cerca i dettagli di elaborazione dei parametri.
2. Test con Postman/cURL.
# Test individual API calls curl -X POST "https://your-magento-site.com/rest/V1/products" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{"product":{"sku":"TEST","name":"Test Product"}}'
Compatibilità versione
Compatibilità con le versioni precedenti
- Anche se le modifiche mantengono la compatibilità generale con le versioni precedenti, possono verificarsi modifiche di interruzione per i parametri API REST che sono tipi complessi e non implementano le interfacce
Api\Data.
API esistenti
- Tutte le API Magento standard rimangono invariate.
- Nessuna modifica sostanziale alle funzionalità di base.
Estensioni personalizzate
- Può essere necessario eseguire aggiornamenti se si utilizza l’iniezione di un costruttore complesso.
- Test consigliati prima della distribuzione nell’ambiente di produzione.
- Gli sviluppatori di estensioni devono aggiornare la documentazione.
Integrazioni di terze parti
- Deve essere testato accuratamente.
- Contattare i fornitori per aggiornamenti sulla compatibilità.
- Monitorare l’integrità dell’integrazione dopo l’aggiornamento.
Domande frequenti
D: è necessario aggiornare immediatamente tutte le integrazioni API?
R: solo le integrazioni che utilizzano l’iniezione di parametri di costruttori complessi devono essere aggiornate. La maggior parte delle chiamate API standard continua a funzionare senza modifiche. Dai priorità alle integrazioni di test e aggiornamento che utilizzano oggetti nidificati complessi nei payload API.
D: come posso identificare se la mia integrazione è interessata?
R: Test delle chiamate API in un ambiente di sviluppo con la nuova versione.
D: esiste uno strumento per migrare automaticamente le chiamate API?
R: Non esiste uno strumento di migrazione completamente automatizzato. La maggior parte dei casi comporta la rimozione di oggetti nidificati complessi e l’utilizzo di strutture di dati API appropriate.
D: cosa succede alle chiamate API esistenti che hanno utilizzato l'iniezione complessa?
R: Queste chiamate API avranno esito negativo con 400 Richiesta non valida o 500 Errore interno del server (per < =2.4.6).
D: questa modifica influisce sulle API di GraphQL?
R: No, questo miglioramento si applica solo alle richieste REST API tramite ServiceInputProcessor. Le API di GraphQL non subiscono modifiche.
D: posso disabilitare temporaneamente questa convalida per il test?
R: No, questa convalida è incorporata nel framework di base e non può essere disabilitata. Puoi eseguire test sulle versioni precedenti di Magento per verificare il comportamento legacy.
D: cosa devo fare se è interessata un'estensione di terze parti?
R: Contattare il fornitore per ottenere una versione aggiornata e compatibile. Se non disponibile, valuta alternative o collabora con uno sviluppatore per creare un livello di compatibilità.