20TD02U_ForAlle_Blooms_Side25_DevSEC - itnett/FTD02H-N GitHub Wiki
+++markdown
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.
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 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 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 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.
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,))
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>")
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.
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!")
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.
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.
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.
Å 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. +++