(Symfony 2) file upload

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ama saril

ama saril

20/08/2015 09:42:00
Quote Anchor link
Beste php'ers,
Na een aantal tutorials te hebben gelezen heb ik een file upload gemaakt (voor plaatjes) in symfony2. Nu heb ik dit helemaal werkend alleen loop ik tegen een tweetal zaken aan (voornamelijk m.b.t. beveiliging) waar ik even niet uit kom.

1. Omdat het een bestand upload is wel ik er natuurlijk voor zorgen dat het wel veilig gaat (het gaat om plaatjes, dus wil alleen images toestaan. Nu heb ik in me entity de volgende annotations geplaatst:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
/**
     *
     * @var string
     * @Assert\Image(
     * maxSize = "1M",
     * maxSizeMessage = "Te groot",
     * mimeTypes = {"image/png"},
     * mimeTypesMessage = "Verkeerd formaat"
     * )
     */

en in mijn controller rename ik het bestand en raad ik het bestandsformat met guessExtension() en verplaats ik het naar een map;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$bestandsnaam = md5(uniqid()).'.'.$bestand->guessExtension();
//newdir is de map waar het terecht moet komen
$bestand->move($newDir, $bestandsnaam);

Nu zou ik graag willen weten of dit genoeg is om het veilig te maken of moet ik nog meer stappen uitvoeren? In de tutorials die ik heb gelezen is dit het enige wat ik kan vinden (met uitzondering van het hieronderstaande punt2.

2. Mijn tweede vraag heeft te maken met 'waar' het plaatje te uploaden. Ik zette eerst alles onder mijn /web directory neer maar las later dat dit niet goed is. Ik laat het nu dan ook verplaatsen naar YzeeBundle/Resources/public/uploads alleen het probleem is dat ik dit niet goed kan aanspreken via twig? Als ik assets:install doe komen al deze bestanden weer in mijn web root te staan maar moet ik dan na elke file upload dit commando uitvoeren? Ik heb alleen een tijdje zitten zoeken hoe dit te handelen maar het enige wat ik kan vinden is 'niet uploaden naar web directory' en daar eindigt het. Heeft iemand een goede link of kan een korte uitleg geven over hoe het wel moet?

Alvast bedankt.
 
PHP hulp

PHP hulp

19/04/2024 20:22:23
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/08/2015 13:42:35
Quote Anchor link
Ik zou zeker de files ook controleren op de mimetype. http://symfony.com/doc/current/reference/constraints/File.html#mimetypes

wat betreft vraag twee:
Het zou me aan me fiets roesten in welke directory je die bestanden opslaat maar er bestaat natuurlijk een levensgroot verschil tussen een publiekelijk toegankelijke directory (web) en een private directory (Waar hopelijk je andere mappen zoals app en src staan).
Gewijzigd op 20/08/2015 18:16:26 door Frank Nietbelangrijk
 
Wouter J

Wouter J

20/08/2015 14:39:55
Quote Anchor link
Vraag 2 is een beetje niet helemaal weten waar de klepel hangt. Het is inderdaad in sommige gevallen totaal niet gewenst bestanden in de web/ directory te zetten. Alles in web/ is namelijk te bereiken door gewoon in de URL in te typen. Als je dus bestanden beveiligt wilt hebben zul je deze ergens anders zetten (bijv. uploads/) en dan een controller maken die deze bestanden toont, alleen als de gebruiker de juiste rechten heeft.
Als je zo'n beveiliging helemaal niet nodig hebt, kun je de bestanden natuurlijk perfect in bijv. web/uploads/ plaatsen.
 
Ama saril

ama saril

24/08/2015 16:40:31
Quote Anchor link
Ok bedankt,
Ik zat namelijk wat bronnen te lezen waarin stond NOOIT bestanden in de /web te plaatsen. Het leek mij een beetje raar dat plaatjes/logos ook niet in /web mogen worden opgeslagen vandaar dat ik het even vraag.

Bedankt voor de antwoorden in ieder geval.
 



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.