Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP]Bestanden zonder extensie in mail form

Pagina: 1
Acties:
  • 539 views

  • UniPer
  • Registratie: April 2003
  • Laatst online: 26-11 17:12
Ik heb in het mail script van het form wat ik heb gemaakt een array gebruikt om aan te geven welke extensies
verstuurd mogen worden via het formulier:

code:
1
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp", "doc", "docx", "png", "txt", "xls", "zip", "rar");


Nu vraag ik mij af hoe ik kan definieren dan ook bestanden zonder extensie verstuurd mogen worden.
Dit heb ik al geprobeerd door "" aan de array toe te voegen:

code:
1
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp", "doc", "docx", "png", "txt", "xls", "zip", "rar", "");


Dit was helaas te makkelijk gedacht.
Ik heb al wat op Google gezocht en op dit forum maar kon nog niet echt wat vinden..

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Je bent er wel van op de hoogte dat de extensie niks zegt over de inhoud? :)

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:42
Mijn glazen bol zegt dat je door het toevoegen van een lege string bestandsnamen toelaat die eindigen op een punt.

  • UniPer
  • Registratie: April 2003
  • Laatst online: 26-11 17:12
Cartman! schreef op dinsdag 08 juni 2010 @ 10:04:
Je bent er wel van op de hoogte dat de extensie niks zegt over de inhoud? :)
Ja...maar wat bedoel je daar precies mee? :?

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


  • UniPer
  • Registratie: April 2003
  • Laatst online: 26-11 17:12
rutgerw schreef op dinsdag 08 juni 2010 @ 10:04:
Mijn glazen bol zegt dat je door het toevoegen van een lege string bestandsnamen toelaat die eindigen op een punt.
Oké, die is inmiddels ook weggehaald aangezien dat niet werkte...de vraag rest dus....hoe wel? 8)

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 19:18

TheNephilim

Wtfuzzle

Als ik het goed begrijp wil je bijlages versturen met php-mail?

Dat kan prima, alleen ben je er met het checken van de extensie niet. Je zult bijv. een MIME check moeten doen. Afhankelijk van je PHP versie kan dat met http://php.net/manual/en/function.mime-content-type.php of met http://www.php.net/manual/en/ref.fileinfo.php (de laatste natuurlijk het liefst)

Nu vraag ik me alleen nog af wat er voor bestanden zijn zonder extensie..?

  • Cartman!
  • Registratie: April 2000
  • Niet online
UniPer schreef op dinsdag 08 juni 2010 @ 10:06:
[...]

Ja...maar wat bedoel je daar precies mee? :?
Waarom doe je in eerste instantie die check? Het is zeker geen gegarandeerde veiligheid namelijk.

Dubbelposten is niet nodig ook, je 2 zinnen kunnen gewoon in 1 post.

edit: heb je al verder iets geprobeerd, ik gooi hem er maar weer in: ga debuggen :)

[ Voor 11% gewijzigd door Cartman! op 08-06-2010 10:11 ]


  • UniPer
  • Registratie: April 2003
  • Laatst online: 26-11 17:12
Bernardo schreef op dinsdag 08 juni 2010 @ 10:07:
Als ik het goed begrijp wil je bijlages versturen met php-mail?

Dat kan prima, alleen ben je er met het checken van de extensie niet. Je zult bijv. een MIME check moeten doen. Afhankelijk van je PHP versie kan dat met http://php.net/manual/en/function.mime-content-type.php of met http://www.php.net/manual/en/ref.fileinfo.php (de laatste natuurlijk het liefst)

Nu vraag ik me alleen nog af wat er voor bestanden zijn zonder extensie..?
Het hele script werkt al, inclusief bijlagen..alles komt aan, keurig in het format zoals ik het wil hebben.
De persoon die het formulier invult krijgt ook een bevestigingsmail, alles is geregeld.

Het enige is dat er applicatie specifieke bestanden zijn die hier intern gebruikt worden die geen extensie hebben, waarom dat is weet ik niet maar goed....zo is de situatie. Dat is de reden dat ik wil weten hoe ik die kan toevoegen in de reeds bestaande array.

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:42
Post eens het stukje code waarin je controleert of een bestandsnaam een geldige extensie heeft?

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 30-11 06:27
Afgezien van het feit dat een check op extensie misschien niet afdoende is om te bepalen met wat voor soort bestand je te doen hebt het volgende:

Allereerst moet je ons echt meer informatie geven en laten zien wat je met die array doet, voordat we je vraag goed kunnen beantwoorden. Mijn glazen bol zit op dezelfde frequentie als die van rutgerw en zegt dat je met het toevoegen van een lege string waarschijnlijk slechts bestandsnamen die op een punt (".") eindigen toelaat en geen bestandsnamen die in het geheel geen extensie hebben. Je geeft nu aan dat je de punt in de vergelijking wel weg wilt halen, maar wat je dan doet streeft echter je doel voorbij. Je gaat dan namelijk vermoedelijk alle bestanden toestaan, immers, alle bestanden eindigen wel op een lege string. Een mogelijke oplossing is de punt naar de array te verplaatsen.

Maar het blijft hoe dan ook koffiedikkijken. Zou je ons in ieder geval de volgende informatie kunnen geven:

1) Wat is het doel van je check op extensies?
2) Waar komen de bestanden vandaan, zijn het uploads van de gebruikerszijde?
3) Op welke manier ga je om met de waarden in die array, waar vindt de werkelijke check plaats?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-11 11:35

Janoz

Moderator Devschuur®

!litemod

Probeer eens te begrijpen wat Cartman zegt. Dat een bestand de extentie jpg heeft betekend niet dat het ook een foto is....

Om terug te gaan naar je oorspronkelijke probleem. Lees je volledige code nog eens door en probeer te begrijpen wat er op elke regel gebeurt. Probeer de paar regels te achterhalen die je bestand daadwerkelijk afkeuren. Kijk naar de manier waarop $allowed_extentions wordt vergeleken met de bestandsnaam en kom dan tot de conclusie waarom het toevoegen van een lege string niet werkt.


Het is heel leuk en aardig dat je iets 'werkends' kunt krijgen door code van internet bij elkaar te lopen knippen en plakken, maar zolang je neit begrijpt waar je code mee bezig is zul je alleen maar tegen dit soort triviale dingen aan blijven lopen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Erwinvz1
  • Registratie: Oktober 2003
  • Laatst online: 18-11 11:47
UniPer schreef op dinsdag 08 juni 2010 @ 10:06:
[...]

Ja...maar wat bedoel je daar precies mee? :?
Extensies is een windows only ding.

Je kan zelfs zonder extensies leven.
Zo is de iphone ookzonder in het mail programma (wat ik keer hebt gezien)
En herken de telefoon het ook als afbeelding (in dit geval jpg)

Als je bijvoorbeeld dingen in een hexeditor opent kan je zelfs herkennen wat voor bestand het is, zonder dat je de extensies weet.

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 22:13
Volgens mij denken jullie te moeilijk, de TS bedoelt het heel simpel.

De gebruiker (De uploader) mag alleen bestanden uploaden met de extentie die in zijn array staat.
Omdat er ook bestanden zijn zonder extentie (hosts-bestand bijvoorbeeld) die verstuurd moeten worden, moet zoiets ook in de array voorkomen...

Kortom, het doel is niet het checken van de extentie, het doel is bestanden zonder extentie versturen via het script.

Zo lees ik het :)

edit: volgens zijn allowed_extensions mogen alleen jpg, png, txt, etc verstuurd worden. Als de uploader zijn hosts-bestand wil uploaden, kan dat dus niet, want die eindigt niet op jpg, png, txt en dergelijke. Hoe kan hij dus een bestand zonder extentie toevoegen aan de lijst met allowed_extensions

@ hieronder: dat is dan wel weer zo idd :+

[ Voor 26% gewijzigd door maarud op 08-06-2010 10:34 ]


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Er zal op een andere manier aangegeven moeten worden dat ook bestanden zonder extensie toegestaan moeten worden, maar daarvoor is het (zoals anderen ook al aangeven) handig om te zien hoe de TS nu de check uitvoert :)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 00:24

MueR

Admin Devschuur® & Discord

is niet lief

Zoals ik in je vorige topic ook aanraadde: neem eens contact op met diegene die de code gemaakt heeft. Heel leuk dat je het min of meer werkend hebt gekregen zoals je wil, maar support op code van derden doen we eigenlijk niet.

Anyone who gets in between me and my morning coffee should be insecure.


  • UniPer
  • Registratie: April 2003
  • Laatst online: 26-11 17:12
maarud schreef op dinsdag 08 juni 2010 @ 10:23:
Volgens mij denken jullie te moeilijk, de TS bedoelt het heel simpel.

De gebruiker (De uploader) mag alleen bestanden uploaden met de extentie die in zijn array staat.
Omdat er ook bestanden zijn zonder extentie (hosts-bestand bijvoorbeeld) die verstuurd moeten worden, moet zoiets ook in de array voorkomen...

Kortom, het doel is niet het checken van de extentie, het doel is bestanden zonder extentie versturen via het script.

Zo lees ik het :)

edit: volgens zijn allowed_extensions mogen alleen jpg, png, txt, etc verstuurd worden. Als de uploader zijn hosts-bestand wil uploaden, kan dat dus niet, want die eindigt niet op jpg, png, txt en dergelijke. Hoe kan hij dus een bestand zonder extentie toevoegen aan de lijst met allowed_extensions

@ hieronder: dat is dan wel weer zo idd :+
Dat is inderdaad precies wat ik bedoel :)
Het is niet de bedoeling dat de gebruikers zometeen executable files en alle andere soorten rotzooi gaan uploaden, daarom is het aantal toegelaten extensies beperkt. Wij kwamen er alleen achter dat sommige gebruikers applicatie specifieke bestanden willen sturen welke niet voorzien zijn van een extensie.
Zoals ik in je vorige topic ook aanraadde: neem eens contact op met diegene die de code gemaakt heeft. Heel leuk dat je het min of meer werkend hebt gekregen zoals je wil, maar support op code van derden doen we eigenlijk niet.
Vreemd, of het nu door mij geschreven is of door een ander, als jullie kunnen zien waar de fout zit en ik hiermee geholpen ben mag dit toch geen probleem zijn. Als zelfs dat al niet meer toegestaan is dan wordt het wel heel erg.

Er zijn echter zoveel mensen die stukjes script van anderen gebruiken, ik bedoel...waarom zou je het wiel voor de tweede keer uitvinden? Hieronder staat in ieder geval het stuk code wat de extensie van de bestanden uiteindelijk goed- of afkeurt op basis van de array:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Get the uploaded file information
    $name_of_uploaded_file =  basename($_FILES['uploaded_file']['name']);
    
    //get the file extension of the file
    $type_of_uploaded_file = substr($name_of_uploaded_file, 
                            strrpos($name_of_uploaded_file, '.') + 1);

$allowed_ext = false;
    for($i=0; $i<sizeof($allowed_extensions); $i++) 
    { 
        if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
        {
            $allowed_ext = true;        
        }
    }
    
    if(!$allowed_ext)
    {
        $errors .= "\n Het verstuude bestandstype wordt niet ondersteund. ".
        " Alleen de volgende bestandstype worden ondersteund: ".implode(',',$allowed_extensions);
    }

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


  • Orion84
  • Registratie: April 2002
  • Laatst online: 19:59

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Hoeveel moeite kan het nu helemaal zijn om daar dan zelf even een check toe te voegen op "geen extensie" en dan alsnog $allowed_ext = true; te doen?

Je helpen is geen probleem, maar dan zou het wel fijn zijn als je zelf ook eens wat probeert en jezelf een beetje verdiept in de materie.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Het verschil tussen het copy-pasten van code en het zelf schrijven van code is een stukje begrip van wat de code doet (in elk geval op het moment dat je nog niet zoveel ervaring hebt).

Heb je de code al gedebugged voor de case waarin er geen extensie meegegeven wordt ?
Wat bevat bijvoorbeeld $type_of_uploaded_file als er geen extensie aanwezig is ?
Hoe kan je dat vervolgens gebruiken om een "uitzondering" op de check te maken als er geen extensie is ?

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Het probleem zit (zoals hier boven genoemd) in de punt. De code definieert de extensie als alles na de punt. Is er geen punt, dan wordt zo te zien de extensie gelijk gemaakt aan de gehele bestandsnaam. Kortom, je moet een list verzinnen om de extensie op een juiste wijze te bepalen.

When life gives you lemons, start a battery factory


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 29-11 18:34

Salandur

Software Engineer

en wat doe je met bestanden die geen extentie hebben, maar wel een punt in de bestandsnaam? bijvoorbeeld 'dit.is.het.document' (waarbij .txt/.doc ontbreekt). Volgens jouw scripts is .document dan de extentie en wordt dus niet geaccepteert.
Je kan dus beter zoals Bernardo in "[PHP]Bestanden zonder extensie in mail form" al aangeeft controleren op de inhoud en op basis daarvan aangeven of je het bestand accepteerd of niet.

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Houdt er ook rekening mee dat het laatste deel van de bestandsnaam (achter de punt) geen extentie -hoeft- te zijn. Het kan ook een samengestelde extensie zijn zoals je dat op unix systemen terug ziet:

bv: Bestand.tar.gz, waarbij 'tar.gz' omschrijft dat het om een tar-bestand gaat dat met gzip compressie kleiner is gemaakt (bestand.exe.gz anyone?)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-11 11:35

Janoz

Moderator Devschuur®

!litemod

UniPer schreef op dinsdag 08 juni 2010 @ 11:00:
Dat is inderdaad precies wat ik bedoel :)
Het is niet de bedoeling dat de gebruikers zometeen executable files en alle andere soorten rotzooi gaan uploaden, daarom is het aantal toegelaten extensies beperkt. Wij kwamen er alleen achter dat sommige gebruikers applicatie specifieke bestanden willen sturen welke niet voorzien zijn van een extensie.
als ik nietlegaal.exe hernoem naar mooi.jpg dan is het niet ineens een plaatje..
Vreemd, of het nu door mij geschreven is of door een ander, als jullie kunnen zien waar de fout zit en ik hiermee geholpen ben mag dit toch geen probleem zijn. Als zelfs dat al niet meer toegestaan is dan wordt het wel heel erg.
De bedoeling is natuurlijk dat je zelf kunt zien waarom het niet werkt. Bekijke het eens van de andere kant. Hoe zou het forum er hier uit zien wanneer iedereen 3 stukken code bij elkaar plakt en vervolgens hier een topic opent om te vragen hoe ze nu daadwerkelijk samengevoegd meoten worden?

We zijn hier geen afhaalbalie waar je een half werkend script wat je neit begrijpt neer kunt dumpen met de mededeling 'Graag functionaliteit X toevoegen'
Er zijn echter zoveel mensen die stukjes script van anderen gebruiken, ik bedoel...waarom zou je het wiel voor de tweede keer uitvinden?
Uiteraard wordt er veel hergebruikt. Maar als graag een wiel wilt hergebruiken dan is het wel handig dat je weet waarom hij rond is.
Hieronder staat in ieder geval het stuk code wat de extensie van de bestanden uiteindelijk goed- of afkeurt op basis van de array:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Get the uploaded file information
    $name_of_uploaded_file =  basename($_FILES['uploaded_file']['name']);
    
    //get the file extension of the file
    $type_of_uploaded_file = substr($name_of_uploaded_file, 
                            strrpos($name_of_uploaded_file, '.') + 1);

$allowed_ext = false;
    for($i=0; $i<sizeof($allowed_extensions); $i++) 
    { 
        if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
        {
            $allowed_ext = true;        
        }
    }
    
    if(!$allowed_ext)
    {
        $errors .= "\n Het verstuude bestandstype wordt niet ondersteund. ".
        " Alleen de volgende bestandstype worden ondersteund: ".implode(',',$allowed_extensions);
    }
Precies wat ik dacht. Ga eerst maar eens even kijken naar die code. Bekijk regel voor regel wat er gebeurt. Hou daarbij de opmerking van ruthgerw in het achterhoofd (het tweede bericht in deze draad). Als je er dan nog neit uit komt ben ik bang dat dit een 'bij het handje neem' topic wordt en dat zien we hier liever neit.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.