Upload routes inherit the Get operation's security, not Patch's
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
Línea de trabajo
Start with UploadableResourceMetadataCollectionFactory, where the upload route is built from the resource's Get operation. Inspect how security and securityPostDenormalize are assigned, and trace the resource's Patch/Put metadata instead. The change is complete when the generated upload operation inherits the write operation's security and the documented anonymous-upload reproduction is rejected.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The bundle builds an uploadable resource's item upload route (POST {iri}/upload) from the resource's Get operation (UploadableResourceMetadataCollectionFactory), so the upload operation gets Get's security. A component with a public Get (the normal case: anyone can read published content) therefore has no operation-level security on uploads. Only the firewall's access_control (component writes admin-only in the template's security.yaml) stops a visitor from replacing a file.
Repro
- Add
#[Silverback\Uploadable]+ an#[UploadableField]to a component whose operations areGet(public) andPatch(security: "is_granted('ROLE_ADMIN')"). - Remove or loosen the
access_controlline for component writes. POST /_api/component/<type>/<id>/uploadas an anonymous user: the upload is accepted.
Fix used locally (Dons Hub)
Restrict Get to reads unless admin, so the derived upload operation is admin-only:
new Get(security: "request === null or request.getMethod() in ['GET', 'HEAD'] or is_granted('ROLE_ADMIN')"),
The proper fix would be for the factory to base the upload operation's security (and securityPostDenormalize) on the resource's Patch/Put operation instead of Get.
- Lenguaje dominante
- PHP
- Estrellas
- 32
- Forks
- 8
- Merge medio
- 1 h 11 min
- PR fusionados (30 d)
- 123
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de components-web-app/api-components-bundle
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
components-web-app/api-components-bundle#333 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
components-web-app/api-components-bundle#325 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
components-web-app/api-components-bundle#259 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
components-web-app/api-components-bundle#186 ·
Los mantenedores suelen responder en 1 día
Todos los issues de components-web-app/api-components-bundle
Issues similares
-
Recognise PHP_CodeSniffer (`phpcs`) as a linterPosiblemente ocupada @HarshRajSinghania la tomó hoy. Abiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
MustacheCase/zanadir#507 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
jwage/phpamqplib-messenger#163 ·
-
Newsletter subscription page logs Undefined array key "nw_error" on every GETPosiblemente ocupada @Codencode la tomó hoy. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 82/100
PrestaShop/ps_emailsubscription#145 · 1 comentario ·
-
PHP 8.5 CURL deprecatedAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
-
jira-created
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 2 días