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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
SQL Sikkerhed
Fra : Harald


Dato : 20-09-03 12:06

Hej

Jeg har en side som benytter php og MySQL. Nogle af siderne kaldes bla.
sådan:

minside.php?Idnr=35

I php´en kaldes så noget i denne stil:

SELECT * FROM mintabel
WHERE IDNUMMER=Idnr

Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan

minside.php?Idnr=35 og så nogle yderligere SQL kald

Mvh
HK



 
 
Harald (20-09-2003)
Kommentar
Fra : Harald


Dato : 20-09-03 12:11

"Harald" <news3@kroning.dk> skrev i en meddelelse
news:3f6c3489$0$24713$edfadb0f@dread14.news.tele.dk...
> Hej
>
> Jeg har en side som benytter php og MySQL. Nogle af siderne kaldes bla.
> sådan:
>
> minside.php?Idnr=35
>
> I php´en kaldes så noget i denne stil:
>
> SELECT * FROM mintabel
> WHERE IDNUMMER=Idnr
>
> Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan
>
> minside.php?Idnr=35 og så nogle yderligere SQL kald

Vil lige nævne at den version at MySQL jeg bruger nu (3) ikke understøtter
UNION men jeg kunne jo finde på at opgradere senere.

/HK



Troels Arvin (20-09-2003)
Kommentar
Fra : Troels Arvin


Dato : 20-09-03 16:07

On Sat, 20 Sep 2003 13:05:44 +0200, Harald wrote:

> Er det her muligt at lave noget fusk

Det afhænger af, hvorledes din PHP-kode ser ud. Prøv PHP-gruppen.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Peter Brodersen (20-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 20-09-03 16:56

On Sat, 20 Sep 2003 13:05:44 +0200, "Harald" <news3@kroning.dk> wrote:

>I php´en kaldes så noget i denne stil:
>
>SELECT * FROM mintabel
>WHERE IDNUMMER=Idnr
>
>Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan

Hvis du bruger dataen direkte, så vil det være muligt at "fuske".

Fusk er dog et vidt begreb. I dette SELECT-tilfælde kan brugeren,
såvidt jeg kan se, ikke tilvælge flere felter, heller ikke med
subselects eller derived tables. Brugeren kan dog forårsage at der
bliver valgt en anden række end oprindeligt tiltænkt, ved at omgå
WHERE-linjen, fx med nogle passende OR-udsagn. Med UNION kan man dog
få flere linjer ud, men såvidt, jeg ved, ikke fx lave INSERTs eller
lignende.

Det kan selvfølgelig også være slemt nok, hvis det fx er en query, der
tjekker brugernavn og kodeord op imod en database, at brugeren kan
vælge, at den bare skal hive en række ud, uanset hvad brugernavnet og
kodeordet er.

Alt afhængigt af klienten vil brugeren derimod ikke have mulighed for
fx at slette rækker ved at hælde flere queries på. I en normal
MySQL-klient vil man kunne bruge ";", "\g" og "\G" for at
afslutte/adskille flere queries - det er dog blot en query-adskiller,
og har ikke noget direkte med MySQL at gøre. I PHPs MySQL-klient vil
denne mulighed med flere queries normalt ikke være tilstede, så folk
kan ikke hælde fx en INSERT- eller DELETE-query på bagefter.

Når det så er sagt, så er der ingen grund til ikke at validere
brugerinputtet. Det kan fx gøres ved at sikre sig at inputtet er et
heltal (alternativt bare tvinge inputtet til at være et heltal), eller
smide værdien i enkelt-quotes, og sørge for at brugerinputtet er
escape'd passende.

Dette varierer så fra sprog til sprog

--
- Peter Brodersen

Ugens sprogtip: terabyte (og ikke terrabyte)

Johan Holst Nielsen (20-09-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 20-09-03 17:19

Harald wrote:
> Jeg har en side som benytter php og MySQL. Nogle af siderne kaldes bla.
> sådan:
>
> minside.php?Idnr=35
>
> I php´en kaldes så noget i denne stil:
>
> SELECT * FROM mintabel
> WHERE IDNUMMER=Idnr
>
> Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan
>
> minside.php?Idnr=35 og så nogle yderligere SQL kald

Well, hvorfor ikke bare validere dit Idnr? F.eks. via is_numberic()
eller eventuelt noget type casting

<http://dk.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting>
<http://php.net/is_numeric>

mvh
Johan


Lars Linde (26-09-2003)
Kommentar
Fra : Lars Linde


Dato : 26-09-03 14:32


"Harald" <news3@kroning.dk> wrote in message
news:3f6c3489$0$24713$edfadb0f@dread14.news.tele.dk...
> Hej
>
> Jeg har en side som benytter php og MySQL. Nogle af siderne kaldes bla.
> sådan:
>
> minside.php?Idnr=35
>
> I php´en kaldes så noget i denne stil:
>
> SELECT * FROM mintabel
> WHERE IDNUMMER=Idnr
>
> Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan
>
> minside.php?Idnr=35 og så nogle yderligere SQL kald
>
> Mvh
> HK

Hvis du ikke validerer på Idnr vil følgende kunne lade sig gøre

Prøv at skrive følgende i din URL i browseren "minside.php?Idnr=35; drop
table mintabel"

Det vil resultere i at følgende køres på din DB

SELECT * FROM mintabel WHERE IDNUMMER=35; drop table mintabel


--
Lars



Peter Brodersen (26-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 26-09-03 17:44

On Fri, 26 Sep 2003 15:31:51 +0200, "Lars Linde"
<someone@somewhere.com> wrote:

>Prøv at skrive følgende i din URL i browseren "minside.php?Idnr=35; drop
>table mintabel"
>
>Det vil resultere i at følgende køres på din DB
>
>SELECT * FROM mintabel WHERE IDNUMMER=35; drop table mintabel

Det bruges ofte som eksempel, men ";" er ikke en del af selve
query'en, og vil rent faktisk udløse en fejl.

De klienter, man dog bruger, når man manuelt fedter queries ind, vil
dog betragte ; som en delimiter, ligesom mysql-klienten også
accepterer \g og \G. Det er dog ganske enkelt bare nødvendigt for en
textmode-klient at have en måde, man kan afslutte sin query på.

Tjek også: <news:bkht9g$8st$1@dknews.tiscali.dk>

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Jens Gyldenkærne Cla~ (26-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-09-03 20:55

Peter Brodersen skrev:

> Det bruges ofte som eksempel, men ";" er ikke en del af selve
> query'en, og vil rent faktisk udløse en fejl.

Gælder det alle databaser/drivere?


> Ugens sprogtip: i dag (og ikke idag)

God idé - jeg tager lige en specielt om databaser.
--
Jens Gyldenkærne Clausen

Sprogtip: Forespørgsel (hverken forspørgelse eller forespørgelse)

Peter Brodersen (26-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 26-09-03 21:40

On Fri, 26 Sep 2003 21:55:20 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>> Det bruges ofte som eksempel, men ";" er ikke en del af selve
>> query'en, og vil rent faktisk udløse en fejl.
>Gælder det alle databaser/drivere?

Det er selvfølgelig farligt at konkludere, men typisk vil en sådan
funktionalitet i et sprog jo være baseret på: "Jeg sender en kommando
afsted, som så giver mig noget materiale tilbage, for den pågældende
kommando". Her ville det ikke give så meget mening, hvis en
grundfunktion tillod flere queries, da det let kunne blive megetp
diffust med at modtage data opdelt i flere tabeller med forskellige
felter af forskellige typer.

Når det er sagt, så skal jeg ikke kunne sige, i hvor høj grad,
forskellige applikationer har abstraheret sig væk fra at kunne sende
"rå queries", så at sige. En applikation som PHPMyAdmin accepterer
uden problemer flere queries adskilt af ;

--
- Peter Brodersen

Ugens sprogtip: i dag (og ikke idag)

Harald (27-09-2003)
Kommentar
Fra : Harald


Dato : 27-09-03 06:51

Tak for svarene, jeg validere nu alle indput så misbrug skulle ikke længere
være mulig (tror jeg).

/HK

<klip>



Michael Zedeler (07-02-2004)
Kommentar
Fra : Michael Zedeler


Dato : 07-02-04 19:47

Harald wrote:
> Jeg har en side som benytter php og MySQL. Nogle af siderne kaldes bla.
> sådan:
>
> minside.php?Idnr=35
>
> I php´en kaldes så noget i denne stil:
>
> SELECT * FROM mintabel
> WHERE IDNUMMER=Idnr
>
> Er det her muligt at lave noget fusk ved f.eks. at kalde min php sådan
>
> minside.php?Idnr=35 og så nogle yderligere SQL kald

Ja. Det er det. Angrebet kaldes "SQL injection" og findes alt for mange
steder idag.

www.owasp.org er et rigtig godt sted at kigge hvis man interesserer sig
for sikre web-applikationer (hvilket de fleste vel burde interessere sig
for).

M.

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste