controle file type csv

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arnold C

Arnold C

06/06/2009 22:32:00
Quote Anchor link
Hallo allemaal,

Op welke manier kan ik mbv $_FILES[file][type] controleren of het ge-uploade bestand inderdaad een csv bestand is?

Ik dacht zelf: (naar voorbeeld van w3schools)
if (($_FILES["file"]["type"] == "text/csv") && ($_FILES["file"]["size"] < 20000))

maar het enige wat werkt bij mij is:
if (($_FILES["file"]["type"] == "text/plain") && ($_FILES["file"]["size"] < 20000))

Niet erg. Maar ik vraag me nu af: bestaat "text/csv" niet of is er iets mis met mn csv-bestand waarmee ik dit ff test?

groet en dank bij voorbaat!
 
PHP hulp

PHP hulp

26/12/2024 13:12:30
 
Steen

steen

06/06/2009 22:34:00
Quote Anchor link
uhm, controleer de extentie...
 
Arnold C

Arnold C

06/06/2009 22:46:00
Quote Anchor link
Ook een idee, maar ik wil graag dat $_FILES[file][type] leren en begrijpen.

Wat is of welke zijn $_FILES[file][type] voor een csv bestand?
 
Joren de Wit

Joren de Wit

06/06/2009 23:05:00
Quote Anchor link
De waarde van $_FILES['file']['type'] is puur en alleen gebasseerd op de extensie van het betreffende bestand waaraan een mime type gekoppeld wordt. In het geval van een CSV zal het wel iets worden als text/comma-separated-values of text/csv.

Wil je weten of de inhoud van een bestand ook daadwerkelijk overeenkomt met de extensie, dan zou je eens naar de fileinfo extensie kunnen kijken. Daarmee wordt bij het bepalen van het type echt naar de inhoud van een bestand gekeken en niet naar de extensie.
 

06/06/2009 23:16:00
Quote Anchor link
Blanche schreef op 06.06.2009 23:05:
De waarde van $_FILES['file']['type'] is puur en alleen gebasseerd op de extensie van het betreffende bestand waaraan een mime type gekoppeld wordt.

En is ook niet te vertouwen, aangezien die door de browser wordt gezet. De waarde kan dus heel makkelijk worden veranderd. Als je alleen hier naar kijkt is het dus heel gemakkelijk om een php bestand te uploaden.
 
Arnold C

Arnold C

07/06/2009 07:51:00
Quote Anchor link
Dank voor jullie meedenken.
Wanneer ik $_FILES['file']['type'] uitlees en echo wanneer ik een .csv bestand upload zegt ie:

Type: text/plain

@Karl en Blanche. Jullie hebben gelijk, het is me om een soort beveiliging te doen. Ik dacht dit in 2 stappen te doen:

1. controle of het ge-uploade bestand daadwerkelijk csv bestand is (en geen .exe met ellende)
2. mbv FILTER_SANATIZE_STRING de gegevens van de csv filteren voordat ik ze overneem en in de database wegschrijf.

Is dit voldoende?
 
Joren de Wit

Joren de Wit

07/06/2009 11:47:00
Quote Anchor link
Arnold schreef op 07.06.2009 07:51:
1. controle of het ge-uploade bestand daadwerkelijk csv bestand is (en geen .exe met ellende)
Dit geeft jou geen garantie dat er geen php of exe bestand geupload wordt. Je kunt namelijk prima een php bestand de extensie .csv geven en hem later zo bewerken dat je hem toch kunt uitvoeren.

Maar dat terzijde, als jij het bestand niet op je server opslaat en ervoor zorgt dat de inhoud op geen enkele manier uitgevoerd kan worden, zit je veilig. Het enige waar je dan nog tegen aan kunt lopen is het feit wat te doen als de inhoud daadwerkelijk geen csv blijkt te zijn. Sla je dat dan wel op in je database of wat?

Als laatste, wil je echt zeker zijn van de inhoud van een bepaald bestand, ongeacht de extensie? Kies dan voor de fileinfo extensie van PHP.
 
Arnold C

Arnold C

08/06/2009 13:10:00
Quote Anchor link
OK!
Ik zie dat fileinfo extensie 'standaard' is vanaf php versie 5.3 (nu nog beta?). In ieder geval draait MAMP nu nog met php 5.2.6. Het is wel de moeite waard, lijkt me. Maar voor dit moment wacht ik maar even op de volgende versie.

Advies van Blanche:
- niet op de server opslaan: OK, ik gebruik alleen $_FILES["file"]["tmp_name"] (maar dat is toch tenminste 'tijdelijk' opslaan?)
- niet uitvoeren: OK, maar wat doet fgetcsv precies? Is dat dan eigenlijk de 'beveiliging' ? Ik bedoel (lees: hoop!): kan fgetcsv ALLEEN met csv files aan de slag? Of gaat fgetcsv ook door een php of exe heenlopen?
 
Joren de Wit

Joren de Wit

08/06/2009 17:42:00
Quote Anchor link
Gebruikers kunnen van buitenaf niet bij de temp bestanden die tijdens het uploaden aangemaakt worden, dus dat is geen probleem.

Verder zal fgetcsv() elk bestand openen om te zien of er csv informatie in zit. Als dat niet het geval is, verwacht ik dat de functie een foutmelding geeft of in ieder geval een lege array terug geeft. PHP code of de inhoud van een EXE zullen in ieder geval niet uitgevoerd worden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.