/ Forside / Teknologi / Udvikling / HTML / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
HTML
#NavnPoint
molokyle 11184
Klaudi 5506
bentjuul 3377
severino 2040
smorch 1950
strarup 1525
natmaden 1396
scootergr.. 1320
e.c 1150
10  miritdk 1110
form....validering?
Fra : John Kjoller


Dato : 19-05-06 18:01

Hvordan er det nu; der er noget med at hackere/spammere kan bruge
form-fields, til.... et eller andet....

Hvordan undgår jeg det?

Det må vel være noget med at jeg tjekker og fjerner, "farligt" input fra et
givent field, -eller hvad?

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?

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?

Mange venlige hilsener
fra
John




 
 
Bertel Lund Hansen (19-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-05-06 18:40

John Kjoller skrev:

> Hvordan er det nu; der er noget med at hackere/spammere kan bruge
> form-fields, til.... et eller andet....

Det er rigtigt. Han kan få det modtagende program til at udføre
en vilkårlig kommando.

> Hvordan undgår jeg det?

Det er en længere forklaring og kommer også an på hvordan din
side fungerer. Det kommer også an på hvilket sprog den modtagende
side er kodet i.

> Det må vel være noget med at jeg tjekker og fjerner, "farligt" input fra et
> givent field, -eller hvad?

Ja.

> 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?

Det er en god idé, men langt fra nok.

> 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 kan du tro. De kan få fuld kontrol over din database, og de
kan få din hjemmeside til at se ud lige som de vil.

Du må spørge i den relevante gruppe. Hvis den modtagende side
(kik ved action=) hedder noget med .php, er det i
<news:dk.edb.internet.webdesign.serverside.php>
hvis den hedder noget med .asp, er det i
<news:dk.edb.internet.webdesign.serverside.asp>.

Men der er også andre muligheder.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Lasse Reichstein Nie~ (19-05-2006)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 19-05-06 19:51

"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.'

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste