2005-01-25

Älä luota selaimeen

Kolmas tyypillinen web-sovelluksista ja sivustojen dynaamisista osista löytyvä tietoturvaongelma on, että selaimen oletetaan toimivan määritetysten mukaan. Esimerkkejä:

- Lomakkeen kenttien arvojen pituuden rajoittaminen pelkästään maxlength-attribuutilla. Saattaa sallia tietokannan täyttämisen roskadatalla tai puskurin ylivuoden aiheuttamisen.

- Sen olettaminen, että select-elementistä muodostettu parametri vastaa tosiaan jotain option-elementtiä.

- Piilotettuina lomakekenttinä (type="hidden") välitettyjen arvojen käyttäminen ilman tarkistuksia. Näiden pitää valvoa olevan sallituissa rajoissa jokaisen kyselyn yhteydessä, muuten saattaa olla mahdollista esimerkiksi päästä käsiksi toisten tietoihin.

- Salassa pidettävien arvojen välittäminen piilotettuina lomakekenttinä.

- Kyselyn mukana välitettyjen otsakkeiden totuudenmukaisuuteen tai olemassaoloon luottaminen (esim. Referer [sic] ja X-Forwarded-For). Edelliseen sijaintiin perustuvan pääsyntarkistuksen tulee käyttää istuntokohtaisia tunnisteita eikä Referer-otsaketta. IP-osoitteisiin pohjautuvan pääsyntarkistuksen tulee käyttää kyselyn IP-osoitetta eikä X-Forwarded-For-otsakkeen osoitetta.

- JavaScriptin käyttäminen lomakkeen arvojen tarkistukseen ilman vastaavia palvelinpuolen tarkistuksia.

Näistä käytännöistä seuraa ongelmia seuraavista syistä:

1. Selain saattaa toimia väärin, joko siksi ettei se tue kyseistä osaa määrityksistä, koska siinä on ohjelmointivirhe tai koska se on muunnettu toimimaan eri tavoin.

2. Selain ei ole välttämätön palvelimen kanssa keskustelemiseen. Hyökkääjä pystyy tekemään täsmälleen sellaisen kyselyn kuin haluaa ja analysoimaan vastausta täsmälleen niin tarkkaan kuin haluaa.

Yhteyden salaaminen TLS:llä tai SSL:llä ei auta lainkaan mainitsemiini ongelmiin, minkään niistä hyödyntäminen ei edellytä toisen henkilön istunnon vakoilua.

Siispä, vastaus kysymykseen "onko tuo turvallinen" ei saa koskaan olla "selain huolehtii siitä". Tietoturvan näkökulmasta selainta ei joko ole olemassa tai se ei ainakaan ole ystäväsi.

(Edit: korjattu auki unohtunut elementti. Edit edit: korjattu auki unohtunut elementti editistä.)