Zie Tegan.quote: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?
quote:Op woensdag 9 februari 2011 22:54 schreef Tegan het volgende:
[..]
Ik snap het gelukkig ook niet echt.
Het is een demonstratie van een veelgebruikte hacktechniek.quote:
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.quote: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.
Of je maakt gewoon een whitelist van de extensies ipv een blacklist.quote: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.
Dat, plus http://mysql-apache-php.com/fileupload-security.htm (behalve dan de blacklist gedeelte).quote: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:Op donderdag 10 februari 2011 09:37 schreef mstx het volgende:
[..]
Of je maakt gewoon een whitelist van de extensies ipv een blacklist.
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 krijgenquote: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).
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.quote: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?
| 1 | WHERE (DATE(starttime) = MAX(DATE(starttime)) |
| 1 | FATAL SQL ERROR: Invalid use of group function |
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.quote: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.
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.quote: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.
quote:Op donderdag 10 februari 2011 13:24 schreef GlowMouse het volgende:
Dit moet met een subquery: WHERE DATE(starttime)= (SELECT MAX(DATE(....
Hmm goed punt.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.
Kan je niet gewoon SELECT MAX(starttime) doen?quote:Op donderdag 10 februari 2011 13:17 schreef KomtTijd... het volgende:
[ code verwijderd ]
[ code verwijderd ]
Wat doe ik fout?
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.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.quote:Op donderdag 10 februari 2011 14:11 schreef remi1986 het volgende:
[..]
Kan je niet gewoon SELECT MAX(starttime) doen?
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...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.
| 1 2 3 4 5 6 | <?php $filename = 'hoi.php' . chr(0) . '.txt'; $filename = trim($filename); if(substr($filename, -4) != '.txt') die(); touch($filename); ?> |
| 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(); } ?> |
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 komenquote: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 nietNet 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.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |