Audit remaining f-string/interpolated SQL and add CI guard
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Comienza buscando cursor.execute, db.execute y connection.execute en policyengine_api/endpoints/, services/, data/ y utils/, y luego inspecciona la configuración de CI existente. Audita cada construcción de SQL dinámica, añade una regla de CI que cubra los patrones de interpolación indicados y actualiza CONTRIBUTING.md con la directriz sobre parametrización. Se considera completado cuando los sitios auditados usan marcadores de posición, CI rechaza los patrones y la directriz está documentada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
#3445 (parameterize update_user_policy keys) and #3451 (drop f-string LIMIT in get_simulations) were filed in isolation from a targeted bug audit. Neither was found via a systematic grep of the repo's SQL surface. A repo-wide audit of f-string/.format() SQL construction is overdue to flush out any remaining patterns before the next incident.
What goes wrong
Today's workflow assumes contributors notice string-interpolated SQL during review. There is no:
- Automated check (ruff, bandit, semgrep rule) for
execute(f"..."orexecute("..." % ...)patterns. - Pre-commit hook blocking string-interpolated SQL.
- Documented guideline in
CONTRIBUTING.mdabout parameterization.
The result is that new endpoints can quietly reintroduce injection vectors; #3445 and #3451 both survived multiple reviews.
Suggested fix
- Audit: grep the repo for all SQL execution sites (
cursor.execute,db.execute,connection.execute, etc.) and verify every dynamic segment is a?/:paramplaceholder. Cover at minimum:policyengine_api/endpoints/(all files)policyengine_api/services/policyengine_api/data/policyengine_api/utils/
- Codify: add a
banditconfig or semgrep rule to CI that fails onexecute(f"..."and similar patterns. Example rule:
- id: fstring-sql
pattern-either:
- pattern: $CONN.execute(f"...")
- pattern: $CONN.execute("..." % $X)
- pattern: $CONN.execute("..." + $X)
message: Don't build SQL with string interpolation — use parameterized queries.
severity: ERROR
languages: [python]
- Document in
CONTRIBUTING.md: "SQL must use parameterized queries; neverf"..."or.format()into a SQL string."
Severity
Medium — no known active vulnerability, but the class of bug has now resurfaced twice in the same repo.
Relates to
Fixes #3445, #3451 (both closed).
- Lenguaje dominante
- Python
- Estrellas
- 18
- Forks
- 33
- Merge medio
- 1 d 10 h
- PR fusionados (30 d)
- 20
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
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 PolicyEngine/policyengine-api
-
Restore Scotland population live coverage with the fixed PolicyEngine bundleQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
PolicyEngine/policyengine-api#3876 ·
Los mantenedores suelen responder en 1 día
-
State society-wide reports run on the sparse national datasetPosiblemente ocupada @anth-volk la tomó hace 5 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
PolicyEngine/policyengine-api#3864 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 38/100
PolicyEngine/policyengine-api#3823 ·
Los mantenedores suelen responder en 1 día
-
API v2: report validations as an append-only, provenance-keyed resource on reportsQuizá libre de nuevo @anth-volk la tomó hace 33 días y no hay ningún pull request abierto. Abierto
PolicyEngine/policyengine-api#3818 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
PolicyEngine/policyengine-api#3816 ·
Los mantenedores suelen responder en 1 día
Todos los issues de PolicyEngine/policyengine-api
Issues similares
-
Broken links found in docsAbiertodocs pydanty:is-working
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
pydantic/pydantic-ai#10113 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
GreedyBear-Project/GreedyBear#1727 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
ARM-software/CMSIS-DSP#354 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
kiat/codeAssist#391 ·
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
darnitdevorg/darnit#587 ·
Los mantenedores suelen responder en 1 día