- COMP.SEC.100
- 16. Ohjelmistoturvallisuus
- 16.4 Lopuksi
Lopuksi¶
Turvallisessa ohjelmistokehityksessäkään pyörää ei tarvitse keksiä uudestaan, vaan olennainen taito on osata hyödyntää jo turvalliseksi havaittuja ratkaisuja. Yksi tärkeä resurssi on avoin yhteisö OWASP [https://owasp.org/], joka tarjoaa mm. TOP 10 -listan kriittisimmistä haavoittuvuuksista, helposti ymmärrettävää tietoa haavoittuvuuksista, ohjeita turvallisista ohjelmointitavoista sekä yksityiskohtaisia ohjeita eri kehitysympäristöihin.
Tässä on hieman laajempi tiivistelmä ohjelmistojen kehittämiseen liittyvistä hyvistä menettelyistä Pfleegerien kirjaa ja FIPS-ohjeistoa mukaillen.
Ohjelmiston hyvä suunnittelu ja rakenne muodostuu mm. seuraavista periaatteista:
- johdonmukainen virheiden käsittely: esim. jokin seuraavista, kun virheen jälkeen on ensin palattu aiempaan tilaan: uusi yritys eri tavalla – jokin korjaus ja uusi yritys samalla tavalla – raportointi ja yrityksestä luopuminen.
- vikaantumisen vaikutusten rajoittaminen (fault tolerance). Tätä toteutetaan sekä ohjelman sisällä (esim. virhetilanteiden ajonaikainen käsittely) sekä ulkopuolella (rajoitukset sille, mitä ohjelma voi tehdä).
- hyväksi havaittujen käytäntöjen soveltaminen (kaikkea yleisistä periaatteista, kuten modulaarisuus, pieniin käytäntöihin, kuten muuttujien määrittelyn yhteydessä ilmaistu käyttöön tuleva vaihteluväli tai liukulukuvertailujen välttäminen)
- modulaarisuus, ohjelmapalasten ominaisuuksia:
- yksi tehtävä, joka on dokumentoitu myös koodiin
- pieni koko, ihmisen ymmärrettävissä
- yksinkertaisuus, esim. ohjelmointirakenteina vain peräkkäisyys, if-then-else, case sekä rakenteiset silmukat.
- riippumattomuus, tehtävän irrallisuus useimmista muista: löyhäkytkentäisyys moduulien välillä (‘loose coupling’)
- kapselointi, erityisesti vain yksi sisäänmenokohta, enintään kaksi ulostulokohtaa (normaali ja virhetilanne)
- paikalliset muuttujat ja kommunikointi parametrien ja paluuarvojen kautta, joiden “laillisuuden” vastaanottaja tarkastaa, jos mahdollista.
- modulaarisuus, ohjelmapalasten ominaisuuksia:
- hierarkkisuus: useista moduuleista kootaan isompi moduuli, joka niin ikään toteuttaa em. ominaisuudet. Tätä toteuttaa myös kommunikoinnin ja palvelujen tarjoamisen kerroksellinen rakenne, joka on tyypillinen käyttöjärjestelmissä ja tietoliikenneprotokollissa. Ei tarkoita moninkertaista sisäkkäisyyttä kontrollirakenteissa.
Palautusta lähetetään...