PDA

Bekijk Volledige Versie : Beste methode om afbeeldingen te uploaden vanuit eigen CMS



pippen
07/04/08, 14:48
Ik maak gebruik achter mijn sites van een zelf ontwikkeld CMS systeem (MySQL+PHP). Bij sommige onderdelen, bijvoorbeeld een nieuwsitem, is het mogelijk om een afbeelding te uploaden. Hiervoor is de uploadmap voorzien van een CHMOD 777. Dit werkt prima, maar ik vraag me af of hier geen betere, veiligere methoden voor zijn. Is dit de standaardmethode?

Ik ben benieuwd. Alvast bedankt!

Ralphmeister
07/04/08, 16:46
Jah hoe wil je het anders doen?

Als het privacy gevoelige plaatjes zijn zou je ze ook op kunnen slaan in een database.. Maar als je de map niet "browsable" maakt en ze namen geeft van willekeurige tekens zullen ze denk ik ook niet heel erg snel gevonden worden..

En anders in database plaatsen..

pippen
07/04/08, 17:43
Klopt dat is ook een mogelijkheid. Een directory op 777 zetten is altijd wat kwetsbaarder natuurlijk. Iedereen op de webserver kan in principe daar iets in plaatsen. Maar andere CMS systemen doen het ook op deze manier?

SF-Jeroen
07/04/08, 18:26
Je kan toch afbeeldingen ook in een mysql database opslaan (Blob). De menigen hierover verschillen wel wat.

RedoX
07/04/08, 19:46
Je kan toch afbeeldingen ook in een mysql database opslaan (Blob). De menigen hierover verschillen wel wat.

Dat is totaal geen leuke optie vooral als je website eenmaal wat verkeer trekt..

Er is eigenlijk niet een omweg om dat plaatje in die map te krijgen omdat de webuser gewoon die rechten moet hebben om te kunnen schrijven in die map..

Voxio
07/04/08, 20:38
Ten eerste kan je de bestandnamen met bijvoorbeeld MD5 omzetten naar iets 'willekeurigs' en ten tweede volstaat 755 voor de map ook wel, de bestanden zelf kan je op 644 zetten.

Sander-
07/04/08, 23:11
Wij gebruiken meestal een mktime() + de filename als bestandsnaam. Verder vaak ook een watermerkje erin als het om grotere foto's gaat, waardoor het risico van het jatten sowieso al kleiner wordt. Daarnaast kun je de betreffende dir bij een juist ingerichte server gewoon op 755 zetten zoals Voxio aangeeft.

tot slot kun je met ene htaccess ook nog eaa voorkomen.

Mark17
07/04/08, 23:20
Een om weg is ook nog mogelijk:
Upload de plaatjes naar een PHP pagina die ze vervolgens mbv FTP op de server zet. Dit is wat ingewikkelder, maar het voorkomt dat PHP schrijfrechten nodig heeft op de betreffende map (via FTP moet PHP er uiteraard wel schrijfrechten voor hebben).

AndriesLouw
14/04/08, 23:59
Ons CMS doet het via FTP, ook al staat de site op localhost. Erg handig, omdat je gelijk alle uploads ook terug ziet in je FTP logfiles.

Stefan Mensink
15/04/08, 00:06
Als de webhoster zijn zaakjes goed voor elkaar heeft hoef je je directories in principe niet wagenwijd open te gooien, maar kan je gewoon onder user-rechten de dingen wegschrijven.

Afbeeldingen opslaan in de database vind ik een typisch gevalletje bad practice. Opslaan onder semi-random namen ook: obscure namen maken geen veiligheid, zeker niet als andere users vrolijk in jouw mapjes kunnen blijven browsen.

Als je je hier echt zorgen over maakt: Neem een betere dienstverlener die de zaken beter beveiligt, of een veiliger product zoals een VPS of een eigen server.

Nota bene: Weet je zeker dat de chmod 777 echt nodig is, of doe je dit standaard omdat het in diverse tutorials wordt genoemd?

XBL
15/04/08, 07:33
Dingen die niet door andere gezien mogen worden, zet je niet op het web (ook al hebben de bestanden obscure namen en link je er nooit naar). Ben je bang voor andere gebruikers: zorg dan dat je rechten goed staan (verdiep je eens in het rechten systeem van linux). Is iets alleen voor jezelf, kan je dit helemaal onzichtbaar maken voor andere gebruikers.

Wil je bestanden (afbeeldingen) alleen toegankelijk maken onder specifieke omstandigheden (als een gebruiker ingelogd is, bijvoorbeeld), zul je wel verder moeten kijken dan rechten op de directories en bestanden. Dit zou je eventueel kunnen oplossen door bijvoorbeeld de bestanden alleen te kunnen lezen via een PHP script (waarbij het plaatje buiten je webroot staat en dus enkel het PHP script en gebruikers op de server zelf toegang hebben tot het plaatje). Dit is waarschijnlijk sneller dan het opslaan in een database.