PythonPodcast 42 - itnett/FTD02H-N GitHub Wiki

Python Mentorkurs – Episode 7: Sikkerhet i Python-programmering

Mentor: "Velkommen tilbake! I dag skal vi snakke om noe veldig viktig i programmering – sikkerhet. Å bygge sikre applikasjoner er essensielt for å beskytte dataene dine og brukerne dine. Vi skal utforske hvordan du kan skrive kode som er sikker mot vanlige angrep, hvordan du kan beskytte sensitive data, og hvordan du kan unngå vanlige sikkerhetshull. La oss dykke rett inn!"


Hvorfor er Sikkerhet Viktig?

Mentor: "Sikkerhet i programmering handler om å sikre at applikasjonene dine kjører på en trygg måte uten å utsette data eller brukere for risiko. Sikkerhet er spesielt viktig når vi jobber med applikasjoner som håndterer personlige data, økonomiske transaksjoner eller andre sensitive opplysninger. Det finnes mange måter en applikasjon kan bli angrepet på, og vår oppgave som programmerere er å minimere disse risikoene."


Beskyttelse av Sensitive Data

Mentor: "La oss starte med hvordan du beskytter sensitive data. Hvis applikasjonen din håndterer brukerinformasjon som passord, økonomiske data eller annen personlig informasjon, må du sørge for at disse dataene blir behandlet på en trygg måte. En god praksis er å aldri lagre passord i klartekst, men i stedet bruke hashing."

Hashing

Mentor: "Hashing er en metode for å konvertere data, som et passord, til en fast størrelse ved hjelp av en algoritme. Dette gjør at vi kan lagre passord i en sikrere form. En av de mest brukte hashing-algoritmene er SHA-256."

import hashlib

passord = "mittsikrepassord" hash_obj = hashlib.sha256(passord.encode()) hashed_passord = hash_obj.hexdigest() print(hashed_passord)

Mentor: "Her bruker vi hashlib-modulen for å hashe et passord ved hjelp av SHA-256. Når passordet er hashet, lagrer vi bare hashen, og ikke selve passordet. Dette beskytter brukeren hvis databasen skulle bli kompromittert."


Bruk av Miljøvariabler for API-nøkler og Passord

Mentor: "Når du jobber med API-nøkler eller databaser, må du unngå å hardkode sensitive opplysninger direkte i koden din. I stedet kan du bruke miljøvariabler til å lagre disse verdiene på en trygg måte. La oss se på et eksempel."

import os

api_nokkel = os.getenv("API_NOKKEL")

Mentor: "Her bruker vi os.getenv() for å hente en miljøvariabel som inneholder API-nøkkelen. På denne måten blir ikke sensitive data eksponert i koden din."


Unngå SQL-injeksjonsangrep

Mentor: "SQL-injeksjon er en av de vanligste angrepene på webapplikasjoner. Det skjer når en angriper sender skadelig SQL-kode gjennom et inputfelt for å manipulere databasen. For å beskytte deg mot dette må du alltid bruke parameteriserte spørringer når du jobber med databaser."

import sqlite3

brukernavn = "ola" query = "SELECT * FROM brukere WHERE navn = ?" conn = sqlite3.connect("database.db") cursor = conn.cursor() cursor.execute(query, (brukernavn,)) resultat = cursor.fetchall()

Mentor: "Her bruker vi en parameterisert SQL-spørring ved å sette inn ? der variabelen skal brukes. Dette forhindrer at angripere kan sende inn ondsinnet SQL-kode gjennom brukernavn-variabelen."


Sikkerhetsprinsippet: Minimer Tillit

Mentor: "En av de viktigste prinsippene i sikkerhet er å minimere tillit. Dette betyr at du aldri skal anta at input fra brukere eller eksterne kilder er trygt. Du må alltid validere input og behandle det som potensielt skadelig før du bruker det i programmet."

user_input = input("Skriv inn alderen din: ")

try: alder = int(user_input) except ValueError: print("Ugyldig input, vennligst skriv et tall.")

Mentor: "Her validerer vi brukerinput ved å forsøke å konvertere den til et heltall. Hvis det oppstår en feil, håndterer vi det ved å informere brukeren om at input var ugyldig."


Beskyttelse mot XSS (Cross-Site Scripting)

Mentor: "XSS-angrep er vanlige i webapplikasjoner der angripere prøver å injisere skadelig skript som kjøres i andre brukeres nettlesere. For å beskytte deg mot XSS må du alltid sørge for å 'escape' (filtrere) all input som vises på en nettside."

from html import escape

user_input = "<script>alert('hack');</script>" sikker_input = escape(user_input) print(sikker_input)

Mentor: "Ved å bruke escape()-funksjonen fra html-modulen kan vi sørge for at spesialtegn, som < og >, ikke blir tolket som HTML-kode, og dermed forhindre XSS-angrep."


Bruk av HTTPS

Mentor: "Når du kommuniserer med eksterne API-er eller nettsteder, må du alltid bruke HTTPS i stedet for HTTP. HTTPS krypterer dataene som sendes mellom klienten og serveren, noe som beskytter dataene dine mot avlytting."


Beskyttelse av API-er og Webtjenester

Mentor: "Hvis du bygger et API eller en webtjeneste, er det viktig å beskytte den mot uautorisert tilgang. En måte å gjøre dette på er å bruke API-nøkler eller OAuth for autentisering, samt å implementere 'rate limiting' for å beskytte mot misbruk."


Bruke Pakkeadministrasjon Sikkert

Mentor: "Når du installerer tredjepartsbiblioteker ved hjelp av pip, må du sørge for at du bruker sikre kilder. Bruk pip freeze for å låse bibliotekversjoner, og vær forsiktig med å installere ukjente pakker."

pip freeze > requirements.txt

Mentor: "Dette genererer en requirements.txt-fil som inneholder versjonene av alle pakkene du bruker, slik at du kan installere nøyaktig samme versjoner på nytt."


Debugging i Produksjonsmiljøer

Mentor: "En annen viktig sikkerhetspraksis er å aldri ha debugging aktivert i et produksjonsmiljø. Debugging gir tilgang til mye informasjon om applikasjonen som kan utnyttes av angripere."


Oppsummering

Mentor: "I denne episoden har vi lært om mange viktige sikkerhetsprinsipper: Hvordan beskytte sensitive data, unngå SQL-injeksjon og XSS-angrep, bruke HTTPS, og sikre applikasjoner mot uautorisert tilgang. Sikkerhet er en kontinuerlig prosess, så husk alltid å tenke på hvordan koden din kan bli angrepet og beskytt den deretter."


Praktisk Oppgave: Sikre et Enkelt Program

Mentor: "Her er en oppgave for deg: Lag et enkelt program som tar brukerinput og lagrer det i en fil. Sørg for at programmet validerer all input og sikrer filen ved å bruke hashing og miljøvariabler der det er nødvendig."


Mentor: "I neste episode skal vi se på avansert feilsøking og testing av Python-kode. Vi vil lære hvordan du kan skrive tester for å sikre at koden din fungerer som den skal, og hvordan du kan feilsøke komplekse problemer. Vi sees da!"


Denne episoden har fokusert på sikkerhet i Python-programmering, og deltageren lærer viktige konsepter som beskytte sensitive data, unngå vanlige angrep som SQL-injeksjon og XSS, og bruke gode sikkerhetspraksiser i utviklingsmiljøer. Gjennom praktiske oppgaver og eksempler får deltageren innsikt i hvordan sikre Python-applikasjoner på en trygg og profesjonell måte.

⚠️ **GitHub.com Fallback** ⚠️