Avatar billede riefart Seniormester
04. januar 2014 - 10:55 Der er 10 kommentarer og
1 løsning

Validering af input

Kære eksperter.
Jeg skal til at lave et site for en virksomhed - det er hverken PET eller Danske bank, men kunden er naturligvis alligevel interesseret i, at brugere ikke kan queste fjendtlige strenge til databasen. Jeg bruger prepered statements og javascript-validering client-side, men er kommet i tvivl om  valideringsbehovet serverside. Nogle steder læser jeg at prepered statements er rigeligt til at forhindre injection, andre steder at man også skal validere udefrakommende indput, selvom man bruger PS. I givet fald hvordan skal jeg validere serverside. Der er vil både være tekst og talstrenge i de input, som skal sendes via søgeformularerne.
Håber på afklaring.
Avatar billede keysersoze Guru
04. januar 2014 - 11:06 #1
Det eneste prepared statements reelt gør er at sikre imod SQL Injections ( http://www.web-dev.dk/post/2008/07/14/SQL-injections-mere-end-bare-et-pling.aspx ) samt håndtering af "farlige" tegn der fx kan escape din SQL og har som sådan intet med validering at gøre. Du bør derfor validere alle dine data serverside såvel som clientside ligesom du ved output af data skal html-encode det (medmindre du selvfølgelig forventer at det er HTML output).
Avatar billede riefart Seniormester
04. januar 2014 - 11:17 #2
Til serside-validering, vil du da foreslå noget i stil med preg_match("/^[A-Z0-9ÆØÅ_ ]+$/i", $str) på tekst- og talstrenge?
Avatar billede riefart Seniormester
04. januar 2014 - 12:32 #3
Keysersoze:
Jeg er lidt usikker på hvad det er for trusler, jeg skal være opmærksom på - og validere for serverside, når jeg bruger prepered statements.
Kan du hjælpe SpørgeJørgen lidt her?
Avatar billede Slettet bruger
04. januar 2014 - 13:36 #4
Jeg vil mene at det er fint at validere for SQL-injections serverside, så længe at strenge er de eneste input-data - hvis det kun er sikkerheden der bekymrer dig. Selvfølgelig skal du så også validere for specialtegn hvis du ikke vil have dem, men de udgør ikke en trussel.

TIl gengæld bør du sikre dig mod XSS når du udskriver brugernes input igen. Dette kan gøres ved htmlentities() med et par flags.

Generelt bør du aldrig stole på input fra client side validering, da man ikke behøver ret meget snilde for at slå validering fra som bruger.
Avatar billede arne_v Ekspert
04. januar 2014 - 15:59 #5
Jeg vil klart anbefale at input validere som beskyttelse mod XSS.

En passende escaping af output kan naturligvis beskytte mod at JavaScript eksekveres, men det beskytter ikke mod at faa et daarligt ry fordi brugerne kan se kode.
Avatar billede arne_v Ekspert
04. januar 2014 - 16:00 #6
Generelt kan det anbefales at bruge positiv input validering fremfor negativ input validering.

Altsaa:

hvis matcher validt format så
    fortsaet
ellers
    fejl

ikke:

hvis matcher invalidt format så
    fejl
ellers
    fortsaet
Avatar billede riefart Seniormester
04. januar 2014 - 18:48 #7
Arne_v:
Kan du give et eks. på validering serverside (for XSS) i forbindelse med php? Er det i stil med hvad jeg spurgte om i #2?
Avatar billede arne_v Ekspert
04. januar 2014 - 18:53 #8
Ja.

Hvis et felt skal indeholdet et tal saa tester du for om alle tegn er tal.

Hvis et felt er et personnavn tester du for om alle tegn er bogstaver eller mellemrum (evt. tillade ' af hensyn til O'Toole).

Beloeb er tal og separator of 2 tal.

O.s.v..

Regex er tit godt til den slags.
Avatar billede keysersoze Guru
04. januar 2014 - 19:40 #9
Enig med arne_v dog med den tilføjelse at du serverside eventuelt kan dele din validering op i 2 logiske dele - den ene er hvad der svarer til din clientside validering såsom "udfyld din email", "kun tal", "max 10 karakterer" osv og give brugeren feedback på det mens den mere kritiske validering som hvis man fx vil validere imod html og JavaScript som input bare resulterer i "fejl".
Avatar billede riefart Seniormester
04. januar 2014 - 22:20 #10
arne_v.
Tak for hjælpen. Et klart svar og en god henvisning til masser af læsestof. Smid et svar.
Avatar billede arne_v Ekspert
05. januar 2014 - 02:29 #11
jeg kan godt smide et svar, men jeg synes ikke at jeg er den eneste som har bidraget her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester