abonnement Unibet Coolblue Bitvavo
  woensdag 9 februari 2011 @ 22:58:15 #151
75592 GlowMouse
l'état, c'est moi
pi_92571651
Ja, één spatie had ook gewerkt. De string die je moet maken begint met hoi.php, eindigt met een hoofdletter T (maar dat laatste mag ook wat anders zijn)
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92571938
Jezus, begrijp hier helemaal niets van. Is dat dan alleen omdat ik een meisje ben? ;)
Beauty is in the eye of the beholder :-)
  woensdag 9 februari 2011 @ 23:04:24 #153
334357 Emery
Heavy Metal King!
pi_92572025
quote:
1s.gif Op woensdag 9 februari 2011 23:03 schreef princesselisah het volgende:
Jezus, begrijp hier helemaal niets van. Is dat dan alleen omdat ik een meisje ben? ;)
Zie Tegan.
"My name is Emery and primarily I make noises - and ideas".
  woensdag 9 februari 2011 @ 23:04:48 #154
75592 GlowMouse
l'état, c'est moi
pi_92572045
quote:
14s.gif Op woensdag 9 februari 2011 22:54 schreef Tegan het volgende:

[..]

Ik snap het gelukkig ook niet echt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  woensdag 9 februari 2011 @ 23:06:24 #155
334357 Emery
Heavy Metal King!
pi_92572152
hoi.php\T
"My name is Emery and primarily I make noises - and ideas".
pi_92572164
Ik snap dat ik het niet snap, en dat ik dus extreem voorzichtig moet zijn met iedere vorm van user input. Dat is genoeg.
pi_92573314
quote:
9s.gif Op woensdag 9 februari 2011 23:06 schreef Emery het volgende:
hoi.php\T
hoi.php\R
hoi.php\N

Dit zou wel flauw zijn.
  donderdag 10 februari 2011 @ 00:03:50 #158
334357 Emery
Heavy Metal King!
pi_92574815
Ik snap het nog steeds niet echt.
"My name is Emery and primarily I make noises - and ideas".
pi_92575086
Die eerste snap je toch wel?
pi_92575335
quote:
10s.gif Op donderdag 10 februari 2011 00:03 schreef Emery het volgende:
Ik snap het nog steeds niet echt.
Het is een demonstratie van een veelgebruikte hacktechniek.

Iemand denkt: "Ik maak een website waar mensen bestanden kunnen uploaden, maar geen .php-bestanden, want het is natuurlijk niet de bedoeling dat iemand anders scripts uitvoert op mijn server"
Maar glowmouse laat ziet dat het vrij eenvoudig is met wat ongebruikelijke tekens, toch een .php-bestand te uploaden wat dus gewoon uitvoerbaar is. Kortom de beveiliging deugt niet.
  donderdag 10 februari 2011 @ 09:31:31 #161
302853 themole
graaft totaal door.
pi_92579958
quote:
1s.gif Op donderdag 10 februari 2011 00:15 schreef KomtTijd... het volgende:

[..]

Het is een demonstratie van een veelgebruikte hacktechniek.

Iemand denkt: "Ik maak een website waar mensen bestanden kunnen uploaden, maar geen .php-bestanden, want het is natuurlijk niet de bedoeling dat iemand anders scripts uitvoert op mijn server"
Maar glowmouse laat ziet dat het vrij eenvoudig is met wat ongebruikelijke tekens, toch een .php-bestand te uploaden wat dus gewoon uitvoerbaar is. Kortom de beveiliging deugt niet.
Dus wat je beter kan doen is ervoor zorgen dat er geen scripts worden uitgevoerd in de map waar je de spullen upload. Daarnaast kan je voor de zekerheid nog steeds die beveiliging inbouwen in het uploadscript.
Niet altijd serieus
  donderdag 10 februari 2011 @ 09:37:34 #162
91039 mstx
2x1/2 = 1/2 x 1/2
pi_92580071
quote:
14s.gif Op donderdag 10 februari 2011 09:31 schreef themole het volgende:

[..]

Dus wat je beter kan doen is ervoor zorgen dat er geen scripts worden uitgevoerd in de map waar je de spullen upload. Daarnaast kan je voor de zekerheid nog steeds die beveiliging inbouwen in het uploadscript.
Of je maakt gewoon een whitelist van de extensies ipv een blacklist.
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
pi_92580904
quote:
14s.gif Op donderdag 10 februari 2011 09:37 schreef mstx het volgende:

[..]

Of je maakt gewoon een whitelist van de extensies ipv een blacklist.
Dat, plus http://mysql-apache-php.com/fileupload-security.htm (behalve dan de blacklist gedeelte).

[ Bericht 3% gewijzigd door #ANONIEM op 10-02-2011 10:17:14 ]
pi_92581911
Nu we het hier toch over hebben, als je een bestand laat uploaden, maar niet opslaat maar direct vanaf de tmp locatie gebruikt. Dan kan iemand daar verder weinig mee doen toch?

dit ivm die XML-functie die ik geschreven heb. Als het bestand geen XML is volgens het juiste schema, gebeurt er verder niets met het bestand.
  donderdag 10 februari 2011 @ 12:39:21 #165
75592 GlowMouse
l'état, c'est moi
pi_92584958
quote:
14s.gif Op donderdag 10 februari 2011 09:37 schreef mstx het volgende:

[..]

Of je maakt gewoon een whitelist van de extensies ipv een blacklist.
Als ik != '.php' in mijn script vervang door == '.jpg', dan is dat niet veiliger.
quote:
1s.gif Op donderdag 10 februari 2011 10:16 schreef Scorpie het volgende:

[..]

Dat, plus http://mysql-apache-php.com/fileupload-security.htm (behalve dan de blacklist gedeelte).
De tekst op de pagina mist wat essentiële zaken. Hun blacklist faalt ook hard, en "Because your upload folder permission is 777, your site user are free to upload anything." suggereert een grote onwaarheid. Getimagesize geeft geen garantie dat er ook daadwerkelijk een plaatje geüpload is. Met het script zoals het daar staat, kan ik .php-files op de server krijgen :)
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  donderdag 10 februari 2011 @ 12:50:14 #166
75592 GlowMouse
l'état, c'est moi
pi_92585336
quote:
2s.gif Op donderdag 10 februari 2011 10:51 schreef KomtTijd... het volgende:
Nu we het hier toch over hebben, als je een bestand laat uploaden, maar niet opslaat maar direct vanaf de tmp locatie gebruikt. Dan kan iemand daar verder weinig mee doen toch?
Dat ligt er maar net aan. Tegenwoordig zijn remote file inclusions per configuratie uitgeschakeld, maar local file inclusions niet. Een slecht script kan daardoor lokale bestanden includen. Gedurende de looptijd van je script is het bestand op de tmp locatie beschikbaar.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92586211
1WHERE (DATE(starttime) = MAX(DATE(starttime))

1FATAL SQL ERROR: Invalid use of group function

Wat doe ik fout? ;(
pi_92586348
quote:
1s.gif Op donderdag 10 februari 2011 12:50 schreef GlowMouse het volgende:

[..]

Dat ligt er maar net aan. Tegenwoordig zijn remote file inclusions per configuratie uitgeschakeld, maar local file inclusions niet. Een slecht script kan daardoor lokale bestanden includen. Gedurende de looptijd van je script is het bestand op de tmp locatie beschikbaar.
Maar dan moet iemand dus eerst al een script op je server planten wat 'm include... Als je zo ver bent heb je dat al niet meer nodig.
  donderdag 10 februari 2011 @ 13:24:16 #169
75592 GlowMouse
l'état, c'est moi
pi_92586385
Dit moet met een subquery: WHERE DATE(starttime)= (SELECT MAX(DATE(....
quote:
1s.gif Op donderdag 10 februari 2011 13:22 schreef KomtTijd... het volgende:

[..]

Maar dan moet iemand dus eerst al een script op je server planten wat 'm include... Als je zo ver bent heb je dat al niet meer nodig.
Ik heb het daarom ook over een slecht script dat zich al op de server bevindt. Zeker in shared hosting situaties heb je het niet altijd voor het zeggen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92586481
quote:
1s.gif Op donderdag 10 februari 2011 13:24 schreef GlowMouse het volgende:
Dit moet met een subquery: WHERE DATE(starttime)= (SELECT MAX(DATE(....

*O*
quote:
Ik heb het daarom ook over een slecht script dat zich al op de server bevindt. Zeker in shared hosting situaties heb je het niet altijd voor het zeggen.
Hmm goed punt.
pi_92587668
quote:
1s.gif Op donderdag 10 februari 2011 13:17 schreef KomtTijd... het volgende:

[ code verwijderd ]

[ code verwijderd ]

Wat doe ik fout? ;(
Kan je niet gewoon SELECT MAX(starttime) doen?
  donderdag 10 februari 2011 @ 14:46:49 #172
75592 GlowMouse
l'état, c'est moi
pi_92589005
quote:
1s.gif Op donderdag 10 februari 2011 14:11 schreef remi1986 het volgende:

[..]

Kan je niet gewoon SELECT MAX(starttime) doen?
Wat als je ook meer informatie wilt over wat er op die tijd is? Je kunt ook aflopend op starttijd sorteren icm limit 1, maar dat is minder snel als je geen index op starttijd hebt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92589325
quote:
Op donderdag 10 februari 2011 14:11 schreef remi1986 het volgende:

[..]

Kan je niet gewoon SELECT MAX(starttime) doen?
Nee, ik wil alle vluchten zien van de laatste vliegdag. Ik moet dus 1) weten welke dag de laatste vliegdag was, en 2) welke vluchten er toen zijn gemaakt.
Bovendien is starttime een datetime veld, dus ik moet alleen de date hebben, anders vindt'ie alleen vluchten die op de seconde gelijk gestart zijn...
  donderdag 10 februari 2011 @ 15:00:29 #174
75592 GlowMouse
l'état, c'est moi
pi_92589487
Als je tabel heel veel vliegdagen gaat bevatten, zal het sneller zijn om met een index op starttime te doen starttime >= (SELECT F(MAX(DATE(starttime))) FROM ...)
waarbij je even moet zoeken wat je voor F moet gebruiken om een datetime te krijgen met die datum en als tijdstip 00:00:00.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92589959
is 1000 veel of is 1.000.000 veel?
  donderdag 10 februari 2011 @ 15:22:29 #176
75592 GlowMouse
l'état, c'est moi
pi_92590288
Een miljoen verschillende dagen is erg veel, dan heb je het over minimaal 2739 jaar tussen de eerste en de laatste vliegdag. Wanneer het over vliegtuigen gaat en niet over diertjes, zul je op zijn vroegst in 1903 beginnen met tellen. De kans is klein dat je software in 4642 nog gebruikt wordt.

Bij 1000 dagen zul je de optimalisatie al zeker merken.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92590911
quote:
Op donderdag 10 februari 2011 15:22 schreef GlowMouse het volgende:
Een miljoen verschillende dagen is erg veel, dan heb je het over minimaal 2739 jaar tussen de eerste en de laatste vliegdag. Wanneer het over vliegtuigen gaat en niet over diertjes, zul je op zijn vroegst in 1903 beginnen met tellen. De kans is klein dat je software in 4642 nog gebruikt wordt.

Bij 1000 dagen zul je de optimalisatie al zeker merken.
Dat bedoel ik, als het pas vanaf een miljoen aan gaat tikken zou het in dit geval een zinloze micro-optimalisatie zijn. 't Hoeft sowieso geen high-performance applicatie te worden maar als de pageload tijden wat omlaag kunnen is natuurlijk altijd leuk...
pi_92590930
Wat je natuurlijk wel kan hebben is meerdere vliegdata op één dag. Als je dan kijkt naar de where date= max(date) (met die subquery) heb je wel meer records
  donderdag 10 februari 2011 @ 19:00:07 #179
75592 GlowMouse
l'état, c'est moi
pi_92600087
Het aantal reacties valt tegen. Dan zal ik het maar verklappen. Pak dit stukje code:
1
2
3
4
5
6
<?php
$filename 
'hoi.php' chr(0) . '.txt';
$filename trim($filename);
if(
substr($filename, -4) != '.txt') die();
touch($filename);
?>
De check op regel4 wordt zonder problemen doorlopen: de laatste vier karakters zijn '.txt'. Bij touch wordt er een stukje C-code uitgevoerd, en in C houden strings op na een nul-byte.
Op http://mysql-apache-php.com/fileupload-security.htm staat dit stukje:
1
2
3
4
5
6
7
8
<?php
//check if its image file

if (!getimagesize($_FILES['imagefile']['tmp_name']))
{ echo 
"Invalid Image File...";
exit();
}
?>
Deze check voorkomt niet dat er php-code op de server komt. Een plaatje is een file, en een file is gewoon opgebouwd uit bytes. Ergens tussen die bytes kunnen best de volgende zitten: <?php echo 'hoi'; ?>. Een plaatje met die code kun je makkelijk zelf maken door met een hex-editor een plaatje te editten en wat bytes te overschrijven. Het resulterende plaatje ziet er niet uit, maar dat ziet de software niet :) Net als bij een html-file, wordt alles tussen <?php en ?> uitgevoerd als PHP-code (en de rest van de file wordt gewoon doorgegeven).
Dit kun je maar op één manier voorkomen. Je kunt het plaatje resizen, maar ondanks dat het een stuk lastiger om een plaatje te vinden dat na resizen de code <?php echo 'hoi'; ?> bevat, is het niet onmogelijk. De manier is daarom om plaatjes waar <?php in voorkomt gewoon te blokkeren. Als plaatjes 1MB zijn, kun je de kans p berekenen dat je een plaatje ten onrechte afkeurt (onder de aanname dat de 0/1'en willekeurig, onafhankelijk en identiek zijn verdeeld):
<?php is vijf bytes. De kans dat vijf willekeurige bytes niet overeenkomen met <?php, is 1-(1/256)5. Je wilt dat in de file van 1MB alle vijf opvolgende bytes verschillend zijn. Er zijn ongeveer een miljoen opeenvolgende series van vijf bytes in een bestand van 1MB. De kans dat er geen <?php in je file zit, is ongeveer 1-p = (1-(1/256)5)1.000.000. Dit is lastig om nauwkeurig te berekenen, daarom pakken we de logaritme: log(1-p) = 1.000.000 log(1-(1/256)5) ~= -10-6. Omdat voor kleine p geldt dat log(1-p) = -p, weten we dat p = 10-6. Je keurt dus één op de miljoen files ten onrechte af.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92601229
quote:
9s.gif Op donderdag 10 februari 2011 19:00 schreef GlowMouse het volgende:
Het aantal reacties valt tegen. Dan zal ik het maar verklappen. Pak dit stukje code:

[ code verwijderd ]

De check op regel4 wordt zonder problemen doorlopen: de laatste vier karakters zijn '.txt'. Bij touch wordt er een stukje C-code uitgevoerd, en in C houden strings op na een nul-byte.
Op http://mysql-apache-php.com/fileupload-security.htm staat dit stukje:

[ code verwijderd ]

Deze check voorkomt niet dat er php-code op de server komt. Een plaatje is een file, en een file is gewoon opgebouwd uit bytes. Ergens tussen die bytes kunnen best de volgende zitten: <?php echo 'hoi'; ?>. Een plaatje met die code kun je makkelijk zelf maken door met een hex-editor een plaatje te editten en wat bytes te overschrijven. Het resulterende plaatje ziet er niet uit, maar dat ziet de software niet :) Net als bij een html-file, wordt alles tussen <?php en ?> uitgevoerd als PHP-code (en de rest van de file wordt gewoon doorgegeven).
Dit kun je maar op één manier voorkomen. Je kunt het plaatje resizen, maar ondanks dat het een stuk lastiger om een plaatje te vinden dat na resizen de code <?php echo 'hoi'; ?> bevat, is het niet onmogelijk. De manier is daarom om plaatjes waar <?php in voorkomt gewoon te blokkeren. Als plaatjes 1MB zijn, kun je de kans p berekenen dat je een plaatje ten onrechte afkeurt (onder de aanname dat de 0/1'en willekeurig, onafhankelijk en identiek zijn verdeeld):
<?php is vijf bytes. De kans dat vijf willekeurige bytes niet overeenkomen met <?php, is 1-(1/256)5. Je wilt dat in de file van 1MB alle vijf opvolgende bytes verschillend zijn. Er zijn ongeveer een miljoen opeenvolgende series van vijf bytes in een bestand van 1MB. De kans dat er geen <?php in je file zit, is ongeveer 1-p = (1-(1/256)5)1.000.000. Dit is lastig om nauwkeurig te berekenen, daarom pakken we de logaritme: log(1-p) = 1.000.000 log(1-(1/256)5) ~= -10-6. Omdat voor kleine p geldt dat log(1-p) = -p, weten we dat p = 10-6. Je keurt dus één op de miljoen files ten onrechte af.
Hier raakte je me kwijt. Maar het is ook niet echt belangrijk dat je sommige files ten onrechte afkeurt, als je maar zeker weet dat er geen .php-bestanden op je server terecht komen :) .
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')