Validering av input: introduksjon
11 mai 2015Korfor treng vi å validera input?
Validera input betyr å sjekka om det brukaren skriv i eit felt er gyldig. Når vi td. bruker eit skjema (form) til å skriva inn brukerdata som feks navn og personopplysningar, så er det nødvendig å ha ein viss kontroll med kva som blir skrive inn. Ein opplagt grunn er at vi må beskytta våre data. For eit skjema kan bli brukt av hackerar og andre ved for eksempel å senda ein skadelig SQL-spørring til databasen. Dette kallast SQL-injection. Dermed kan ein få ut sensitiv informasjon (som passord osv) eller skada databasen ved å sletta / endra data. Derfor bør vi ha ein kontroll som sikrarar det ikkje er SQL-kode eller liknande i feltet. Ein annan viktig grunn til å sjekka input er at vi vil gjerne hjelpa brukaren til å skriva inn riktig data, og - så langt som mulig - kontrollera for feil eller manglande input.
Validering på tjener-side eller klient-side?
Validering kan vi utføra både på tjenaren (webserver) og på klienten (nettlesaren). Og det er, som vi skal sjå, gode grunnar til å gjera det på begge stader. Spørsmålet er kva du skal gjera kor. Det er opplagte ting som bare kan sjekkast på tjenersida, som brukarnavn og passord, og alt som har med sikkerhet å gjera. Hovedgrunnen er at alle testane du gjer på klienten, lett kan omgåast. Ein person med uvennlige hensikter treng ikkje nødvendigvis bruka den fine nettsida di til å senda data til tjenaren. Så hovedregelen er at all validering som handlar om sikkerhet må du gjera på tjenaren. Det du gjer på klienten er bare ei hjelp for brukaren. Fordelen med ein sjekk allerede på klient-sida er at vi ikkje treng belasta hverken nettet eller tjener-maskinen fordi sjekken blir utført på din egen maskin,. Og brukaren får tilbakemelding umiddelbart før han trykkjer på send-knappen. Men bakdelen er for det første at det er meir begrensa kva vi kan sjekka på . Feks kan vi neppe sjekka på om ei epostadresse verkeleg eksisterer. (Korleis kan vi finna ut det? Her er ein måte). I såfall måtte websida innehalda informasjon om alle adressene i heile verda. Inntil nylig var dei vanligaste måtane å validera på, å kjøra eit script, dvs eit lite program. På tjenersida kan vi td. gjera det med PHP-kode som kjører på webservereb, mens på klientsida har javascript vore det vanligaste, fordi det kan kjørast av nettlesaren. Med HTML5 har det komt nye måtar å gjera klient-side validering som kan erstatta javascript.
Validering på klient-sida
Det vi kan gjera på klient-sida er for det første å sjekka formatet, dvs at at ei epostadresse har alfakrøll og punktum på riktig plass. "bla@blabla.bla" har riktig format, men fins antagelig ikkje. Andre ting vi kan skjekka er om eit felt, feks navn, faktisk er utfylt. Der kan vi også sjekka for at det består av lovlige tegn. Vidare kan vi sjekka på om tall har gyldige verdiar, feks at alder ikkje er negativ og at den ikkje er større enn ei viss grense. Datoar kan vi kontrollera både for riktig format og for lovlige verdiar. Dette vil jo variera med bruken i den aktuelle applikasjonen. I somme felt vil vi feks. tillata framtidige datoar, i andre ikkje. Uansett vil vi ikkje tillata at måned er større enn 12 og at dato er større enn antallet dagar i den aktuelle månaden. Helst bør vi ein egen skuddårssjekk for kontroll av kva år som har datoen 29/2. Vi kan også sjekka på at td telefonnummer har riktig antal siffer. Men husk at dette vil vera forskjellig for ulike land, slik at det må vi ta høyde for hvis det skal vera lov å skriva inn internasjonale nr. Dessuten er det mulig å sjekka om obligatoriske valg (som mann/kvinne?) er fyllt ut. Alt avhengig av kva slags data brukaren skal skriva inn, så kan det vera mange andre ting å sjekka på, og når dette er gjort riktig vil det både hjelpa brukaren og vera hjelpa sikkerheten. Her kan du sjå eit eksempel på dette.