"John Kjoller" <john@skrivikkedette-basix.dk> writes:
> Hvordan er det nu; der er noget med at hackere/spammere kan bruge
> form-fields, til.... et eller andet....
Han kan putte data i det. Hvis server-side-scriptet er dårligt skrevet
(og det er der rigtigt mange af dem der er), så kan det være at snedigt
udvalgte data kan få serveren til at gøre noget der ikke var meningen
(i værste fald kan man få den til hvad som helst).
> Hvordan undgår jeg det?
Tjekker alle input på serveren inden du bruger dem, så du er sikre
på at de er "ufarlige".
> Det må vel være noget med at jeg tjekker og fjerner, "farligt" input fra et
> givent field, -eller hvad?
Det afhænger helt af hvilke data brugeren skal kunne angive, og hvad
de skal bruges til.
> Nogen sagde til mig at jeg skal fjerne "\" fra input-strengen. - Er det
> korrekt, og er det nok at nøjes med at fjerne det?
Hvis "\" er et tegn som brugeren kan forventes at give i et rigtigt input,
så er det ikke godt at fjerne det. Hvis det så også skal gives til noget
andet kode hvor "\" betyder noget specielt, så skal man finde en måde
at kode det på.
> Og kan hackere/spammere bruge mine formfields, selvom der bare er tale om et
> formfield som skriver input strengen ind i en mysql database, og vises som
> gæstebogs indslag?
Det ville være et klassisk eksempel på noget der kan gå galt hvis man
behandler brugerinput uforsigtigt.
Antag at du har får et input fra brugeren, og du så vil oprette en
ny række i din tabel med det input.
Du kunne så bygge noget SQL på formen:
"INSERT INTO mytable VALUES (" + nextId + ", '" + input + "');"
Altså, hvis input var "Hans", og nextId var 42, så ville SQL'en blive:
INSERT INTO mytable VALUES (42, 'Hans');
Det ser jo tilforladeligt ud.
Så komme skurken og sender et input med indholdet:
test');UPDATE mytable SET name = 'Hans' WHERE id='0' OR 'x'='y
Dit genererede SQL bliver så (ombrudt):
INSERT INTO mytable VALUES (42, 'test');
UPDATE mytable SET name = 'Hans' WHERE (id='0' OR 'x'='y');
Lige pludselig hedder administratoren "Hans".
Mere kritiske ændringer ville være hvis man overskrev password
eller droppede databasen.
Derfor skal man altid bruge host-variable, altså SQL på formen:
INSERT INTO mytable VALUES (?,?);
og så indsætte værdierne bagefter med funktioner der sørger for
at alle tegn bliver behandlet rigtigt.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'