(Symfony 2) file upload
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)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
/**
*
* @var string
* @Assert\Image(
* maxSize = "1M",
* maxSizeMessage = "Te groot",
* mimeTypes = {"image/png"},
* mimeTypesMessage = "Verkeerd formaat"
* )
*/
*
* @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)
1
2
3
2
3
$bestandsnaam = md5(uniqid()).'.'.$bestand->guessExtension();
//newdir is de map waar het terecht moet komen
$bestand->move($newDir, $bestandsnaam);
//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.
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).
Ik zou zeker de files ook controleren op de mimetype. 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
Als je zo'n beveiliging helemaal niet nodig hebt, kun je de bestanden natuurlijk perfect in bijv. web/uploads/ plaatsen.
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.