Sikker Python
Beskyt secrets, inputs, SQL, subprocesses, filer og dependencies.
Secrets
API-nøgler og passwords hører ikke hjemme i kildekoden eller Git. Læs dem fra miljøvariabler eller en secret manager.
import os
api_key = os.environ.get("MY_APP_API_KEY")
if not api_key:
raise RuntimeError("MY_APP_API_KEY mangler")Commit en .env.example med feltnavne, aldrig de rigtige værdier.
Valider ved grænsen
Alt fra brugere, filer, netværk og databaser kan være forkert. Kontrollér type, format, længde, størrelse og tilladte værdier, før data sendes videre.
Undgå farlige genveje
- Brug parameteriseret SQL, aldrig string formatting.
- Undgå
eval()ogexec()på ekstern tekst. - Brug ikke
pickletil data fra ukendte kilder. - Undgå
shell=Truemed dynamiske kommandoer. - Udpak ikke arkiver uden at kontrollere paths mod path traversal.
Filpaths
from pathlib import Path
root = Path("uploads").resolve()
candidate = (root / user_filename).resolve()
if root not in candidate.parents:
raise ValueError("Ugyldig filsti")Dependencies
Fastlås versioner for reproducerbare builds, opdatér løbende, og scan for kendte sårbarheder. Fjern pakker, du ikke bruger.
Passwords og tokens
Hash passwords med en dedikeret password-algoritme som Argon2 eller bcrypt, inklusive salt. Brug ikke almindelig SHA-256 til passwords. Tokens skal være tilfældige, korte i levetid og kunne tilbagekaldes.
Fejl og logs
Vis en neutral fejl til brugeren og log de tekniske detaljer internt. Logs må ikke indeholde passwords, tokens, sessions eller komplette persondata.
Sikkerhedstjek
Gennemgå dataflowet fra input til output. Spørg, hvem der må udføre handlingen, hvilke ressourcer input kan nå, og hvad der sker ved gentagelse eller meget store inputs.