Audit remaining f-string/interpolated SQL and add CI guard
Maintainer antworten meist innerhalb von 3 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
Rechercherichtung
Beginne damit, cursor.execute, db.execute und connection.execute in policyengine_api/endpoints/, services/, data/ und utils/ zu durchsuchen, und prüfe anschließend die bestehende CI-Konfiguration. Prüfe jede dynamische SQL-Konstruktion, füge eine CI-Regel hinzu, die die aufgeführten Interpolationsmuster abdeckt, und aktualisiere CONTRIBUTING.md mit der Richtlinie zur Parametrisierung. Als erledigt gilt die Aufgabe, wenn die geprüften Stellen Platzhalter verwenden, CI die Muster ablehnt und die Richtlinie dokumentiert ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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).
- Vorherrschende Sprache
- Python
- Sterne
- 18
- Forks
- 33
- Ø Merge
- 2 T. 16 Std.
- Gemergte PRs (30 T.)
- 53
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus PolicyEngine/policyengine-api
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
PolicyEngine/policyengine-api#4037 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
PolicyEngine/policyengine-api#3911 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
PolicyEngine/policyengine-api#3910 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Return a 400 for economy years the simulation service's model cannot projectEvtl. vergeben @anth-volk hat das heute übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
PolicyEngine/policyengine-api#4093 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Document UK breakdown results' withheld area codes, and stop serving breakdowns cached without themEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 43/100
PolicyEngine/policyengine-api#4091 ·
Maintainer antworten meist innerhalb von 3 Tagen
Alle Issues in PolicyEngine/policyengine-api
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
MIT-LCP/wfdb-python#590 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
pollen-robotics/reachy_mini#1517 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 69/100
NRLMMD-GEOIPS/pluginify#41 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
scverse/spatialdata#1293 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_evals#2788 ·
Maintainer antworten meist innerhalb von 1 Tag