Tällä sivulla kuvataan kolme yleistä tietoturvaongelmaa ja annetaan ohjeet niiden välttämiseen.
Hyökkääjä voi tehdä muutoksia sivujen osoitteissa ja lomakkeissa oleviin tietoihin.
Esimerkiksi järjestelmä voi olla
toteutettu niin,
että jokainen käyttäjä voi katsella
henkilökohtaisia tietojaan sivun
tiedot.php?id=123
kautta,
jossa 123 on käyttäjän id-numero.
Hyökkääjä voi kokeilla vaihtaa osoitteessa olevan id-numeron toiseksi siinä toivossa, että järjestelmä antaa nähdä vieraan käyttäjän tiedot.
Ohjelmoija ei saa luottaa, että sivustolle annetut parametrit ovat oikein. Joka vaiheessa täytyy tarkistaa, että käyttäjällä on oikeus nähdä pyytämänsä tiedot. Esimerkissä riittää tarkistaa, että parametrina annettu id-numero vastaa kirjautuneen käyttäjän id-numeroa.
SQL-injektiossa hyökkääjä pystyy muuttamaan SQL-kyselyn rakennetta antamalla sopivan syötteen.
Esimerkiksi seuraavan kyselyn on tarkoitus varmistaa, että käyttäjä on antanut oikean tunnuksen ja salasanan:
SELECT id FROM kayttajat WHERE tunnus = '$tunnus' AND salasana = '$salasana'
Hyökkääjä voi kuitenkin antaa
haluamansa käyttäjänimen ja salasanaksi
' OR '' = '
, jolloin
lopullinen kysely on seuraava:
SELECT id FROM kayttajat WHERE tunnus = 'ahslaaks' AND salasana = '' OR '' = ''
Nyt kyselyn osana on uusi ehto,
joka pitää varmasti paikkansa
(tyhjä merkkijono on tyhjä merkkijono),
ja OR
-sanan ansiosta
sen toteutuminen riittää,
vaikka salasana ei olisi oikein.
Lokakuussa 2007 hakkeri sai käsiinsä 78000 salasanaa suomalaisilta nettisivustoilta. Murrot perustuivat SQL-injektioon.
SQL-kyselyn osaksi ei saa sijoittaa merkkijonoa, joka mahdollistaa kyselyn muuttamisen. Helpoin ratkaisu on käyttää parametroituja kyselyitä, jolloin käyttäjän antamia tietoja ei yhdistetä kyselyyn sellaisenaan vaan erillisen metodin kautta. Metodi tekee sitten tiedoille tarvittavat muutokset kuten lisää merkkijonossa olevien heittomerkkien eteen kenoviivat. Esimerkiksi PHP:n PDO-luokan avulla kyselyt voi muodostaa parametroidusti esimerkin mukaisesti.
XSS-aukko tarkoittaa, että hyökkääjä pystyy yhdistämään nettisivun osaksi omaa HTML- tai JavaScript-koodia.
Esimerkiksi jos keskustelupalstan viesti tulostetaan sivulle sellaisenaan, hyökkääjä voi kirjoittaa esimerkiksi seuraavan viestin:
<script> while (1) { alert("Sivuston koodaaja on peelo!"); } </script>
Nyt kun seuraava käyttäjä avaa keskustelun, selain näyttää koko ajan viesti-ikkunassa tekstin "Sivuston koodaaja on peelo!"
XSS-aukon seuraukset voivat olla vakavampiakin: hyökkääjä voi esimerkiksi pystyä lähettämään JavaScriptin avulla käyttäjän kirjautumistietoja sisältävät evästeet omalle palvelimelleen.
Sivulle ei saa tulostaa
käyttäjän antamaa tekstiä
ilman esikäsittelyä.
Esimerkiksi PHP:n funktio
htmlspecialchars
estää HTML:n ja JavaScriptin
lisäämiseen tekstiin.
Se muuttaa esimerkiksi
merkin < muotoon <
ja merkin > muotoon >.