Tietoturva web-kehityksessä – kehittäjän näkökulma

Julkaistu 5.5.2020 | Päivitetty 17.5.2024

Web-kehityksen tietoturva on kriittinen osa ohjelmistokehitystä, jossa pyritään suojaamaan sovelluksia ja niiden käyttäjiä erilaisilta uhilta. Tässä blogitekstissä tarkastelemme web-kehitykseen liittyvää tietoturvaa kehittäjien näkökulmasta ja käsittelemme muutamia tunnetuimmista tietoturvauhista sekä niiden torjuntakeinoja. SQL- ja XSS-hyökkäysten estäminen, tietojen tallentamisen hyvät käytännöt ja sivustoille tuotujen komponenttien ylläpito varmistavat omalta osaltaan tietoturvan web-sivustoilla.

Tietoturva on olennainen osa laadukasta koodia ja sen ylläpitoa, eikä sitä voi sivuuttaa missään kehityksen vaiheessa. Tietoturvaa voidaan lähestyä esimerkiksi loppukäyttäjän, kehittäjän tai palvelun tuottajan näkökulmista. Kaikki lähtee siitä, että tunnistetaan kunkin ryhmän ominaispiirteet, ja löydetään jokaiseen tietoturvauhkaan toimivat ja asialliset ratkaisut.

Tunnetuimmat tietoturvauhkat

Injektiohyökkäykset web-kehityksessä

Injektiohyökkäyksillä tarkoitetaan tietoturvahyökkäyksiä, joissa hyökkääjä lisää omia, haitallisia komentojaan sovelluksen käyttöliittymän kautta. Kyseessä on joukko vanhimpia tietoturvauhkia, jotka häiritsevät käyttäjiä vielä tänäkin päivänä: The Open Web Application Security Project (OWASP) listaa injektiohyökkäykset kriittisimmäksi haavoittuvuudeksi top 10 web-haavoittuvuuksien listallaan.

Injektiohyökkäyksille ovat alttiita verkkopalvelut, joissa käyttäjä voi lisätä omia syötteitään erilaisten toimintojen toteuttamiseksi. Esimerkiksi lomakkeita sisältävät sivustot, verkkokaupat ja muut sisäänkirjautumista edellyttävät palvelut, joiden taustalla hyödynnetään tietokantaa tai palvelinta, ovat kaikki alttiita injektiohyökkäyksille. 

Puutteet ja virheet käyttäjän antaman syötteen tarkistuksessa ja varmennuksessa luovat hyvän maaperän injektiohyökkäyksille ja mahdollistavat haitallisen syötteen suorittamisen ohjelmakoodissa. Tämä voidaan torjua ohjelmallisesti kiinnittämällä huomiota automaattiseen tarkastukseen ja varmennukseen, joka estää haitallisten syötteiden pääsyn palvelimelle ja edelleen tietokantaan. 

SQL-injektiot ja XSS (Cross Site Scripting) lyhyesti

Injektiohyökkäyksistä tunnetuimmat ovat SQL-injektiot ja XSS-hyökkäykset.

  • SQL-injektiot: Hyökkääjä ujuttaa SQL-komentoja syötekenttien kautta, jolloin hän voi päästä käsiksi tietokantaan ja sen sisältöön. Tämä mahdollistaa tietojen varastamisen, muokkaamisen tai jopa poistamisen. SQL-injektioiden torjumiseksi tulee käyttää parametrisoituja kyselyjä ja valmisteltuja lausekkeita, jotka estävät haitallisten komentojen suorittamisen.
  • XSS-hyökkäykset: XSS-hyökkääjät puolestaan iskevät selaimen kautta ja upottavat haitallisia komentoja palvelimella sijaitsevan alkuperäisen lähdekoodin tilalle. Kun käyttäjän selain suorittaa XSS-hyökkääjän koodia, hyökkääjä voi esimerkiksi varastaa uhrinsa tunnisteita, ohjata uhrin haitallisille sivustoille ja turmella alkuperäisen sivuston lisäämällä sinne omia sisältöjään. 

Syötteen validointi

Hyökkäykset voidaan estää tehokkaasti varmistamalla, että kaikki käyttäjän syötteet tarkistetaan ja validoidaan ennen niiden käsittelyä. Tämä tarkoittaa muun muassa:

  • Syötteen rajoittamista sallittuihin merkkeihin.
  • Haitallisten komentojen suodattamista.
  • Käyttäjän syötteen käsittelyä siten, että se ei voi sisältää suoritettavaa koodia.

Syötteen validoinnin lisäksi on tärkeää käyttää turvallisia koodauskäytäntöjä, kuten tulostuskohtaisia koodauksia (esim. HTML-, JavaScript- ja URL-koodaukset), jotka varmistavat, että syötteet eivät aiheuta haavoittuvuuksia sovelluksessa.

Tunnistautumisen luotettavuus ja tietojen suojaaminen

Luotettava tunnistautuminen on kriittistä tietoturvan kannalta. Hyvin toteutettu tunnistautuminen estää luvattoman pääsyn järjestelmään ja suojaa käyttäjien henkilökohtaisia tietoja. Käyttäjät ovat tottuneet tunnistautumaan erilaisiin palveluihin, joissa tarjotaan yksilöllistä  vuorovaikutusta. Tunnistautumisen tarkoituksena on myös rajoittaa pääsyä sellaiseen arkaluonteiseen tietoon, jonka tarkasteluun käyttäjällä ei ole oikeutta. 

Puutteellisesti toteutettu tunnistautuminen web-palvelussa avaa hyökkääjälle mahdollisuuden käyttäjän istunnon ja yksilöllisten tunnisteiden kaappaamiseen. Hyökkääjä voi esimerkiksi napata tunnisteet houkuttelemalla käyttäjän klikkaamaan saastuneita linkkejä tai vakoilemalla tunnisteet suoraan salaamattomasta yhteydestä. Kun käyttäjäkohtaiset tiedot ovat hyökkääjän hallussa, hyökkääjä voi tunnistautua palveluun uhrin tietojen avulla.

Tunnistautumisen hyvät käytännöt

Käyttäjän istunnon ja yksilöllisten tunnisteiden kaappauksia estetään tekemällä käyttäjäkohtaisista istunnoista ainutkertaisia. Ainutkertaisuus varmistetaan niin, että jokaista istuntoa kohden luodaan uniikit ja kertakäyttöiset tunnisteet. Kun nämä tunnisteet vanhenevat, hyökkääjä ei voi arvailla tunnuksia enää istunnon jälkeen.

Yksi tapa huolehtia tunnistautumisen tietoturvasta on hyödyntää monitorointia. Kun järjestelmä huomaa tunnettuja hyökkäyksen tuntomerkkejä, monitoroinnilla voidaan aiheuttaa automaattisia hälytyksiä tai hyökkääjään kohdistuvia porttikieltoja. Monitorointi auttaa myös käyttöoikeuksien väärinkäytösten estämisessä. 

  • Istuntojen hallinta: Istunnot tulee tehdä ainutkertaisiksi ja niiden tunnisteiden tulee vanheta säännöllisesti. Tämä estää hyökkääjiä kaappaamasta istuntoja ja käyttämästä niitä uudelleen.
  • Monitorointi: Tunnistautumiseen liittyviä hyökkäyksiä voidaan estää monitoroinnilla, joka tunnistaa epäilyttävää toimintaa ja aiheuttaa automaattisia hälytyksiä tai hyökkääjän estämisen.

Kaksivaiheinen tunnistautuminen

Kaksivaiheinen tunnistautuminen (2FA) lisää ylimääräisen suojakerroksen käyttäjätileille. 2FA:ssa käyttäjän on syötettävä käyttäjätunnuksen ja salasanan lisäksi toinen todennusmenetelmä, kuten tekstiviestillä tai autentikointisovelluksella saatu koodi. Tämä estää hyökkääjiä pääsemästä tileille pelkällä varastetulla salasanalla.

Tietosuojaa arkaluontoisille tiedoille

Tietosuoja on yksi tärkeä tietoturvan osa-alue, joka tulee huomioida etenkin tietokantoja suunniteltaessa. Tietoa tallennettaessa on varmistettava, ettei tieto itsessään sisällä mitään tietoturvauhkia.

Web-sovelluksissa liikutellaan myös arkaluontoista tietoa, joihin esimerkiksi käyttäjätilien salasanatkin kuuluvat. Tällaisen kriittisen tiedon tulisi olla joko hajautettu tai salattu riittävän tehokkaalla algoritmilla mahdollisten tietovuotojen vahinkojen minimoimiseksi. On esimerkiksi syytä välttää saman salasanan käyttöä ja suosia ennemmin useita erilaisia salasanoja sekä niiden hallintaohjelmia. 

On tärkeää, että jo suunnitteluvaiheessa huomioidaan kriittisen tiedon tallentaminen ja salaaminen. Käytännössä salaus tulee tehdä niin, että hyökkääjän on mahdotonta purkaa arkaluonteisia tietoja. Arkaluontoinen data voidaan myös anonymisoida käyttötarkoituksesta riippuen.

Tietojen salaaminen

Arkaluontoiset tiedot, kuten salasanat ja henkilötiedot, tulee aina suojata tehokkaasti. Tämä saavutetaan käyttämällä vahvoja salausalgoritmeja ja varmistamalla, että tiedot tallennetaan turvallisesti.

  • Salaus: Tietojen salaaminen estää niiden luvattoman lukemisen. Salattujen tietojen murtaminen on hyökkääjälle huomattavasti vaikeampaa kuin salaamattomien.
  • Anonymisointi: Joissain tapauksissa arkaluontoiset tiedot voidaan anonymisoida, jolloin ne eivät sisällä suoraan henkilöön yhdistettäviä tietoja.

Salasanojen hallinta

Salasanat tulee aina tallentaa turvallisesti. Salasanat tulee hajauttaa (hash) käyttäen suolaa (salt) ja vahvoja hajautusalgoritmeja, kuten bcrypt tai Argon2. Tämä estää hyökkääjiä saattamasta selville salasanoja tietomurron jälkeen. Lisäksi käyttäjiä tulisi ohjata käyttämään vahvoja ja uniikkeja salasanoja eri palveluissa.

Komponenttien ylläpito web-kehityksessä

Web-kehityksessä on tapana hyödyntää ulkoisia komponentteja, joilla tuodaan valmiita osakokonaisuuksia verkkosivustoille. Tällaisia komponentteja ovat esimerkiksi julkaisujärjestelmien käännöslisäosat kieliversioita varten ja kirjautumiseen liittyvät, eri järjestelmien väliset rajapinnat.

Ulkoisten komponenttien käyttöönotossa on oltava huolellinen, koska komponentin virheellinen määritys voi avata sivustolle haavoittuvuuksia. Ulkoiset komponentit eivät myöskään ole ikuisia, vaan vaativat ylläpitoa, seurantaa ja päivityksiä, jotta yksittäisen osan haavoittuvuus ei vaaranna koko sivuston turvallisuutta. Asiantuntevalla sovelluskehittäjällä onkin aina käytössään sopivia työkaluja, joilla voi tulkita tällaisten haavoittuvuuksien potentiaalisia vaikutuksia verkkosivun komponentteihin.

  • Päivitykset ja ylläpito: Ulkoiset komponentit vaativat säännöllistä päivittämistä ja ylläpitoa. Vanhentuneet komponentit voivat sisältää tietoturva-aukkoja, jotka on korjattu uusissa versioissa.
  • Määritys ja seuranta: Komponenttien määrityksissä on oltava tarkkana, jotta ne eivät avaa turhia haavoittuvuuksia. Lisäksi on käytettävä työkaluja, joilla voidaan seurata komponenttien tilaa ja niiden mahdollisia haavoittuvuuksia.

Kolmannen osapuolen kirjastot

Kolmannen osapuolen kirjastojen käyttö voi nopeuttaa kehitystä, mutta niiden käytössä on noudatettava varovaisuutta. On tärkeää valita hyvämaineisia kirjastoja, jotka ovat aktiivisesti ylläpidettyjä ja joiden lähdekoodi on avoin tarkastettavaksi. Lisäksi on tärkeää seurata kirjastoissa havaittuja haavoittuvuuksia ja päivittää kirjastot säännöllisesti.

Tietoturva on osa laadukasta koodia

Web-kehityksessä tietoturva ei ole sivujuonne, vaan siihen panostetaan ohjelmistokehityksen kaikissa vaiheissa. Tietoturva itsessään on hyvin laaja aihepiiri, ja kehityksessä mukana pysyminen sekä digitaalisen turvallisuuden kehittäminen vaatii jatkuvaa alan ilmiöiden seuraamista ja yksityiskohtaista osaamista.

  • Koodin tarkistukset: Koodin säännölliset tarkistukset ja auditoinnit auttavat löytämään ja korjaamaan mahdollisia tietoturva-aukkoja ennen kuin ne päätyvät tuotantoon.
  • Kehittäjien koulutus: Kehittäjien jatkuva koulutus ja tietoturvatietoisuuden lisääminen on olennaista, jotta he pystyvät tunnistamaan ja estämään tietoturvauhkat tehokkaasti.

Testaus ja auditointi

Tietoturvatestauksella, kuten penetraatiotestauksella ja haavoittuvuusskannauksilla, voidaan löytää ja korjata haavoittuvuuksia ennen kuin ne päätyvät tuotantoon. Lisäksi on suositeltavaa teettää säännöllisiä tietoturva-auditointeja kolmansien osapuolten toimesta, jotta varmistetaan sovellusten ja järjestelmien turvallisuus.

Tietoturva on oleellinen asia paitsi web-kehityksessä, myös kaikissa muissa ohjelmistokehityksen palveluissa. Tietoturva on prosessi, joka vaatii jatkuvaa huomiota ja kehittymistä, jotta voidaan vastata alati muuttuvaan uhkakenttään. Kun yhä useammat ohjelmistot ja niiden taustalla toimivat tietokannat siirtävät tietoa reaaliaikaisesti verkossa, tietoturvaosaamiselta edellytetään huipputasoa ketjun kaikissa vaiheissa. Ei riitä, että kehittäjä hallitsee yhden tietoturvan osa-alueen – on tärkeää ymmärtää myös kokonaiskuva.

Lue myös: Tietoturvalliset WordPress-verkkosivut yritykselle.

Jätä yhteydenottopyyntö