Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Audit remaining f-string/interpolated SQL and add CI guard

Aperta
#3,477 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
python, sql

Direzione di ricerca

Inizia cercando cursor.execute, db.execute e connection.execute in policyengine_api/endpoints/, services/, data/ e utils/, quindi esamina la configurazione CI esistente. Verifica ogni costruzione SQL dinamica, aggiungi una regola CI che copra i pattern di interpolazione elencati e aggiorna CONTRIBUTING.md con la linea guida sulla parametrizzazione. Il lavoro è completato quando i punti verificati usano placeholder, CI rifiuta i pattern e la linea guida è documentata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug security

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"..." or execute("..." % ...) patterns.
  • Pre-commit hook blocking string-interpolated SQL.
  • Documented guideline in CONTRIBUTING.md about parameterization.

The result is that new endpoints can quietly reintroduce injection vectors; #3445 and #3451 both survived multiple reviews.

Suggested fix

  1. Audit: grep the repo for all SQL execution sites (cursor.execute, db.execute, connection.execute, etc.) and verify every dynamic segment is a ?/:param placeholder. Cover at minimum:
    • policyengine_api/endpoints/ (all files)
    • policyengine_api/services/
    • policyengine_api/data/
    • policyengine_api/utils/
  2. Codify: add a bandit config or semgrep rule to CI that fails on execute(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]
  1. Document in CONTRIBUTING.md: "SQL must use parameterized queries; never f"..." 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).

Lingua principale
Python
Stelle
18
Fork
33
Merge medio
1g 7h
PR unite (30g)
22

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di PolicyEngine/policyengine-api

Tutte le issue di PolicyEngine/policyengine-api

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.