MrFaws Docs
Lær Python

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() og exec() på ekstern tekst.
  • Brug ikke pickle til data fra ukendte kilder.
  • Undgå shell=True med 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.

On this page