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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hjælp til regex og sikkerhed
Fra : Frank K. Jensen


Dato : 14-03-09 16:29

Hejsa

Jeg er ved at lave et lille billedgalleri script. I scriptet bruger jeg GET
til at holde styr på hvilken mappe og/eller hvilket billede der skal vises.
Altså noget alá: ?dir=test&pic=testpic.jpg

Jeg vil gerne have, at man ikke kan misbruge scriptet til at få adgang til
andre filer, end der var tænkt. Scriptet bliver kaldt fra en mappe, hvor
billederne ligger i en undermappe (alt i denne undermappe og videre ned er
offentligt).

Altså scriptet ligger i f.eks. ...../galleri/index.php
Billederne ligger i ...../galleri/billeder/ (og undermapper)
Et kald til ?dir=test&pic=testpic.jpg
vil altså vise billedet ...../galleri/billeder/test/testpic.jpg

Jeg vil så gerne tjekke GET argumenterne for sikre, at man ikke kan skrive
et eller andet, hvor man får adgang til andre filer. Min første tanke var,
at så længe ingen af dem startet med enten 'punktum' eller 'skråstreg', så
vil det være ok.
Er det rigtigt?

Ud over det vil jeg gerne understøtte internationale tegn, så jeg tjekker op
imod 'rawurlencode' af GET argumenterne. F.eks.
ereg("......",rawurlencode($_GET['pic']))
Er det fint nok, hvis jeg bare tjekker at rawurlencode($_GET['pic']) ikke
starter med 'punktum' eller '%2F' (som er skråstreg)?

mvh Frank



 
 
Carsten (15-03-2009)
Kommentar
Fra : Carsten


Dato : 15-03-09 12:03

"Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> wrote in
message news:49bbcd3d$0$90269$14726298@news.sunsite.dk...
> Hejsa
>
> Jeg er ved at lave et lille billedgalleri script. I scriptet bruger jeg
> GET til at holde styr på hvilken mappe og/eller hvilket billede der skal
> vises. Altså noget alá: ?dir=test&pic=testpic.jpg

du kunne overveje at kryptere både "dir" og "pic" - evt. begge på en gang.
På den måde bliver det nærmest umuligt at rette i urlen og stadig få et
brugbart katalog- og billede-navn. Altså...

?dir=HEFADBBACD&pic=HADCBABEFD33E

eller begge på en gang som:

?picpath=HEFADBBACDEE5F2ADCBABEFD33E

Du skal så blot vælge en algoritme som giver mulighed for både kryptering og
dekryptering.

Hvis en "smart" bruger retter lidt i ovenstående "picpath" så vil resultatet
sandsynligvis blive så "forkert" at det ikke giver mening som
katalog/billedenavn mere.

Carsten



Frank K. Jensen (16-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 16-03-09 16:45

"Carsten" <carsten@noexists.dk> skrev i en meddelelse
news:49bce069$0$56769$edfadb0f@dtext02.news.tele.dk...
> "Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> wrote in
> message news:49bbcd3d$0$90269$14726298@news.sunsite.dk...
>> Hejsa
>>
>> Jeg er ved at lave et lille billedgalleri script. I scriptet bruger jeg
>> GET til at holde styr på hvilken mappe og/eller hvilket billede der skal
>> vises. Altså noget alá: ?dir=test&pic=testpic.jpg
>
> du kunne overveje at kryptere både "dir" og "pic" - evt. begge på en gang.
> På den måde bliver det nærmest umuligt at rette i urlen og stadig få et
> brugbart katalog- og billede-navn. Altså...
>
> ?dir=HEFADBBACD&pic=HADCBABEFD33E
>
> eller begge på en gang som:
>
> ?picpath=HEFADBBACDEE5F2ADCBABEFD33E
>
> Du skal så blot vælge en algoritme som giver mulighed for både kryptering
> og dekryptering.
>
> Hvis en "smart" bruger retter lidt i ovenstående "picpath" så vil
> resultatet sandsynligvis blive så "forkert" at det ikke giver mening som
> katalog/billedenavn mere.

God ide, men jeg vil nu gerne have at man kan gå direkte til et galleri ved
at skrive det.

mvh Frank



Bertel Lund Hansen (15-03-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-03-09 12:19

Frank K. Jensen skrev:

> Jeg vil så gerne tjekke GET argumenterne for sikre, at man ikke kan skrive
> et eller andet, hvor man får adgang til andre filer. Min første tanke var,
> at så længe ingen af dem startet med enten 'punktum' eller 'skråstreg', så
> vil det være ok.
> Er det rigtigt?

Det er temmelig sikkert, men ikke 100 %. Hvis én gætter navnet på
en mappe der ligger under /galleri/billeder/ (i mit eksempel:
"rotur"), kan han skrive:

   ?dir=rotur/../../../etc/hosts

På den måde kan han tilgå en vilkårlig mappe der ikke er
blokeret.

Hvorfor tjekker du ikke bare om filnavnet ender på ".jpg"?

Den skudsikre metode består i at opsamle et array med tilladte
mappenavne og en anden med tilladte filnavne og så holde
GET-værdien op mod dem. Med funktionen glob() kan man læse
filnavne i en mappe ind i et array.

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

Frank K. Jensen (16-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 16-03-09 16:56

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:akopr4h3igkpuq861rg3ls6ue949unbnai@news.stofanet.dk...
> Frank K. Jensen skrev:
>
>> Jeg vil så gerne tjekke GET argumenterne for sikre, at man ikke kan
>> skrive
>> et eller andet, hvor man får adgang til andre filer. Min første tanke
>> var,
>> at så længe ingen af dem startet med enten 'punktum' eller 'skråstreg',
>> så
>> vil det være ok.
>> Er det rigtigt?
>
> Det er temmelig sikkert, men ikke 100 %. Hvis én gætter navnet på
> en mappe der ligger under /galleri/billeder/ (i mit eksempel:
> "rotur"), kan han skrive:
>
> ?dir=rotur/../../../etc/hosts
>
> På den måde kan han tilgå en vilkårlig mappe der ikke er
> blokeret.

Ja, den havde jeg ikke lige tænkt på

> Hvorfor tjekker du ikke bare om filnavnet ender på ".jpg"?

Fordi der kan være mapper med billeder som ikke ligger under galleriet, som
ikke bør kunne ses. (Ikke fordi at jeg har noget hemmeligt liggende, men
bare fordi at jeg gerne vil gøre ordenligt.)

> Den skudsikre metode består i at opsamle et array med tilladte
> mappenavne og en anden med tilladte filnavne og så holde
> GET-værdien op mod dem. Med funktionen glob() kan man læse
> filnavne i en mappe ind i et array.

Noteret, men med mit galleri skal den så lave arrayet on-the-fly, hver gang
der ses en side, hvilket også vil tage lidt tid (måske er det ubetydeligt).

mvh Frank



Frank K. Jensen (16-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 16-03-09 23:37

"Frank K. Jensen" <frank2007-slet-dette-samt-årstal@indbakke.com> skrev i en
meddelelse news:49be76a8$0$90264$14726298@news.sunsite.dk...
> "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
> news:akopr4h3igkpuq861rg3ls6ue949unbnai@news.stofanet.dk...
>> Frank K. Jensen skrev:
>>
>>> Jeg vil så gerne tjekke GET argumenterne for sikre, at man ikke kan
>>> skrive
>>> et eller andet, hvor man får adgang til andre filer. Min første tanke
>>> var,
>>> at så længe ingen af dem startet med enten 'punktum' eller 'skråstreg',
>>> så
>>> vil det være ok.
>>> Er det rigtigt?
>>
>> Det er temmelig sikkert, men ikke 100 %. Hvis én gætter navnet på
>> en mappe der ligger under /galleri/billeder/ (i mit eksempel:
>> "rotur"), kan han skrive:
>>
>> ?dir=rotur/../../../etc/hosts
>>
>> På den måde kan han tilgå en vilkårlig mappe der ikke er
>> blokeret.
>
> Ja, den havde jeg ikke lige tænkt på

Hvad så hvis man tjekker, at der ikke er to punktummer ved siden af
hinanden?

mvh Frank



Bertel Lund Hansen (17-03-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-03-09 08:04

Frank K. Jensen skrev:

> Hvad så hvis man tjekker, at der ikke er to punktummer ved siden af
> hinanden?

Det burde virke. Så kan man ikke gå op i mappehierarkiet (ikke
nærme sig roden). En simpel test blot på om der er to
nabopunktummer vil også udelukke navne som "godt..billede.jpg",
men hvem bruger også den slags?

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

Frank K. Jensen (17-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 17-03-09 20:07

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:bniur4dcbhla9lget8rhb5alflodf1hm74@news.stofanet.dk...
> Frank K. Jensen skrev:
>
>> Hvad så hvis man tjekker, at der ikke er to punktummer ved siden af
>> hinanden?
>
> Det burde virke. Så kan man ikke gå op i mappehierarkiet (ikke
> nærme sig roden). En simpel test blot på om der er to
> nabopunktummer vil også udelukke navne som "godt..billede.jpg",
> men hvem bruger også den slags?

Det har du selvfølgelig ret i, men hvem bruger også sådanne filnavne...?

mvh Frank



Dan Storm (15-03-2009)
Kommentar
Fra : Dan Storm


Dato : 15-03-09 13:40

Frank K. Jensen skrev:
> Hejsa
>
> [SNIP]
>

Af ren og skær nysgerrighed, kunne jeg da godt tænke mig at vide hvorfor
du ikke har valgt at bruge en database til at løfte den opgave?

Fleksibiliteten i at bruge - eksempelvis - mysql bør kunne opveje de
overvejelser.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Philip Nunnegaard (15-03-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 15-03-09 15:25

Dan Storm skrev:

> Af ren og skær nysgerrighed, kunne jeg da godt tænke mig at vide hvorfor
> du ikke har valgt at bruge en database til at løfte den opgave?
>
> Fleksibiliteten i at bruge - eksempelvis - mysql bør kunne opveje de
> overvejelser.

Og som en sidegevinst bliver URL'en tilmed kortere: ?billed=24 hvor 24
er ID-nummeret på den post i databasen der angiver billedet og dets
placering.


--
Philip - http://chartbase.dk

Frank K. Jensen (16-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 16-03-09 17:01

"Dan Storm" <shadyz_REMOVETHIS_@err0r.dk> skrev i en meddelelse
news:49bcf718$0$15893$edfadb0f@dtext01.news.tele.dk...
> Frank K. Jensen skrev:
>> Hejsa
>>
>> [SNIP]
>>
>
> Af ren og skær nysgerrighed, kunne jeg da godt tænke mig at vide hvorfor
> du ikke har valgt at bruge en database til at løfte den opgave?

Fordi jeg gerne vil holde det simplet. Ideen er at man bare skal ftp
billeder og mapper over på serveren, og så kører det bare. Ikke noget med at
uploade gennem webinterface eller "bygge" galleriet. (Det kan ske, at jeg
revurderer det, men det er planen ind til videre .

mvh Frank



Dan Storm (16-03-2009)
Kommentar
Fra : Dan Storm


Dato : 16-03-09 21:41

Frank K. Jensen skrev:
> Fordi jeg gerne vil holde det simplet. Ideen er at man bare skal ftp
> billeder og mapper over på serveren, og så kører det bare. Ikke noget med at
> uploade gennem webinterface eller "bygge" galleriet. (Det kan ske, at jeg
> revurderer det, men det er planen ind til videre .
>

Det kan da også gøres simpelt med MySQL.

En løsning du kunne lave er at have en mappe du uploader dine billeder
til og så har du et cronjob der behandler den mappe.

Det bliver også nemmere at udvide din applikation med en så fleksibel
løsning.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Frank K. Jensen (17-03-2009)
Kommentar
Fra : Frank K. Jensen


Dato : 17-03-09 20:11

"Dan Storm" <shadyz_REMOVETHIS_@err0r.dk> skrev i en meddelelse
news:49beb96d$0$15898$edfadb0f@dtext01.news.tele.dk...
> Frank K. Jensen skrev:
>> Fordi jeg gerne vil holde det simplet. Ideen er at man bare skal ftp
>> billeder og mapper over på serveren, og så kører det bare. Ikke noget med
>> at uploade gennem webinterface eller "bygge" galleriet. (Det kan ske, at
>> jeg revurderer det, men det er planen ind til videre .
>>
>
> Det kan da også gøres simpelt med MySQL.
>
> En løsning du kunne lave er at have en mappe du uploader dine billeder til
> og så har du et cronjob der behandler den mappe.
>
> Det bliver også nemmere at udvide din applikation med en så fleksibel
> løsning.

Ja, det er rigtigt, og måske noget jeg vil overveje, men så skal man også
til at sætte MySQL server og cronjob op, og så er det ikke længere bare: ftp
script, ftp billeder og voila.

mvh Frank



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

Månedens bedste
Årets bedste
Sidste års bedste