20TD02U_ForAlle_Blooms_Side25_DevSEC - itnett/FTD02H-N GitHub Wiki

+++markdown

🔒 Grunnleggende Sikkerhet i Programmering

Introduksjon

Sikkerhet i programmering er avgjørende for å beskytte applikasjoner mot potensielle trusler som kan føre til datatyveri, tjenestenektangrep, eller annen skade. Grunnleggende sikkerhetspraksiser bør integreres i alle stadier av utviklingsprosessen for å minimere sårbarheter og sikre at applikasjoner er robuste mot angrep. Denne veiledningen dekker grunnleggende sikkerhetskonsepter, vanlige sårbarheter, og beste praksis for sikker programmering.

🔑 Grunnleggende Sikkerhetskonsepter

🌐 Inndata Validering

Inndata validering handler om å sikre at alle data som kommer inn i systemet, er gyldige og trygge. Dette hindrer ondsinnet input fra å forårsake uønsket oppførsel eller sikkerhetsproblemer.

Eksempel på inndata validering i Python:

import re

# Validerer en e-postadresse
def er_gyldig_epost(epost):
    mønster = r'^[\w\.-]+@[\w\.-]+\.\w+$'
    return re.match(mønster, epost) is not None

epost = input("Skriv inn e-postadresse: ")
if er_gyldig_epost(epost):
    print("Gyldig e-postadresse")
else:
    print("Ugyldig e-postadresse")

🔐 Autentisering og Autorisering

Autentisering er prosessen med å bekrefte en brukers identitet, mens autorisering handler om å gi en autentisert bruker tilgang til spesifikke ressurser basert på deres tillatelser.

Beste praksis:

  • Bruk sterke passord: Tving brukere til å opprette komplekse passord og bruk tofaktorautentisering (2FA) for ekstra sikkerhet.
  • Implementer RBAC (Role-Based Access Control): Tildel tillatelser basert på brukerroller for å begrense tilgangen til sensitive funksjoner.

🔄 Sikker Koding

Sikker koding handler om å skrive kode som er fri for sårbarheter og følger beste praksis for å beskytte applikasjonen mot kjente trusler.

Eksempler på sikker koding:

  • Unngå hardkoding av passord: Ikke hardkod konfidensielle opplysninger som passord eller API-nøkler i kildekoden.
  • Bruk parameteriserte spørringer: Forhindre SQL-injeksjon ved å bruke parameteriserte spørringer i stedet for å sette inn brukerinput direkte i SQL-spørringer.

🌍 Sikker Datahåndtering

Sikker datahåndtering innebærer å beskytte data både under overføring og lagring. Dette inkluderer bruk av kryptering og andre sikkerhetstiltak for å sikre at sensitive data ikke blir eksponert.

Eksempler på sikker datahåndtering:

  • Krypter passord: Bruk sterke kryptografiske algoritmer, som bcrypt, til å kryptere passord før de lagres.
  • Bruk HTTPS: Sikre all kommunikasjon mellom klient og server ved å bruke HTTPS i stedet for HTTP.

🌐 Vanlige Sikkerhetssårbarheter

SQL Injection

SQL Injection er en type angrep der en angriper injiserer ondsinnet SQL-kode i en databaseforespørsel. Dette kan gi angriperen uautorisert tilgang til data eller tillate dem å manipulere databasen.

Eksempel på SQL-injeksjonssårbar kode:

# Farlig kode: Brukerinput inkludert direkte i SQL-spørringen
brukernavn = input("Skriv inn brukernavn: ")
query = f"SELECT * FROM brukere WHERE brukernavn = '{brukernavn}'"

Sikker løsning med parameterisert SQL:

# Sikker kode: Bruk parameteriserte spørringer
cursor.execute("SELECT * FROM brukere WHERE brukernavn = %s", (brukernavn,))

Cross-Site Scripting (XSS)

XSS-angrep skjer når en applikasjon tillater ondsinnet kode, ofte JavaScript, å bli injisert i websider som andre brukere ser. Dette kan føre til at angriperen stjeler brukerdata eller utfører uautoriserte handlinger på vegne av andre brukere.

Eksempel på sårbar kode:

# Viser brukerinput direkte uten escaping
navn = input("Skriv inn navn: ")
print(f"<h1>Velkommen, {navn}!</h1>")

Sikker løsning med escaping:

import html

# Escape brukerinput før det vises
navn = html.escape(input("Skriv inn navn: "))
print(f"<h1>Velkommen, {navn}!</h1>")

Cross-Site Request Forgery (CSRF)

CSRF-angrep tvinger en bruker til å utføre uønskede handlinger på en applikasjon der brukeren er autentisert. Dette kan utnyttes for å få brukeren til å utføre handlinger uten deres samtykke.

Eksempel på beskyttelse mot CSRF:

  • Bruk CSRF-token: Inkluder unike tokens i skjemaer og valider dem på serveren for å sikre at forespørselen er legitim.

🛠 Beste Praksis for Sikker Programmering

📜 Valider og Sanitér All Inndata

All brukerinput bør valideres og saniteres før den behandles videre. Dette forhindrer at ondsinnet data kan forårsake sikkerhetsproblemer.

Eksempel på Inndata Validering og Sanitization:

# Validering av tall
def er_gyldig_tall(verdi):
    return verdi.isdigit()

tall = input("Skriv inn et tall: ")
if er_gyldig_tall(tall):
    tall = int(tall)
else:
    print("Ugyldig tall!")

🔒 Bruk Sikker Kommunikasjon

Sørg for at all kommunikasjon mellom klient og server er kryptert for å beskytte data mot avlytting.

Beste praksis:

  • Implementer HTTPS: Bruk TLS/SSL for å sikre at all trafikk mellom klient og server er kryptert.
  • Bruk sikre protokoller: Bruk sikre protokoller som SSH for fjernstyring og FTPS eller SFTP for filoverføringer.

🔐 Krypter Sensitive Data

Kryptering beskytter data mot uautorisert tilgang ved å sikre at selv om dataene blir stjålet, vil de være uleselige uten riktig nøkkel.

Beste praksis:

  • Krypter passord med bcrypt: Bruk bcrypt til å kryptere passord før de lagres i databasen.
  • Bruk sterke krypteringsalgoritmer: Sørg for at sensitive data, som kredittkortinformasjon, er kryptert med sterke algoritmer som AES.

🌍 Hold Programvare Oppdatert

Sørg for at alle biblioteker, rammeverk og annen programvare er oppdatert til de nyeste versjonene for å beskytte mot kjente sårbarheter.

Beste praksis:

  • Automatiser oppdateringer: Bruk verktøy som Dependabot for å holde avhengigheter oppdatert.
  • Gjennomfør regelmessige sikkerhetsskanninger: Bruk verktøy som OWASP Dependency-Check for å identifisere og oppdatere sårbare avhengigheter.

🎯 Konklusjon

Å implementere grunnleggende sikkerhet i programmering er avgjørende for å bygge robuste og sikre applikasjoner. Ved å forstå vanlige sårbarheter som SQL Injection, XSS og CSRF, og ved å følge beste praksis for validering av inndata, kryptering av data, og sikker kommunikasjon, kan du redusere risikoen for sikkerhetsbrudd betydelig. Sikker programmering bør være en kontinuerlig prosess som integreres i alle faser av utviklingsprosessen for å sikre at applikasjoner er beskyttet mot trusler.


Opprettet og optimalisert for Github Wiki. Følg med for flere dyptgående veiledninger om sikkerhet i programmering, grunnleggende sikkerhetskonsepter, og beste praksis for å beskytte applikasjoner. +++

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