Door
Onbekende gebruiker
op 23-11-2017 22:59
gewijzigd op 29-04-2020 23:19
4.702 views
Hallo,
Zoals je hier zien staat er een upload page waar je filmpjes kunt uploaden.
Nu zou ik graag willen dat als iemand een filmpje upload dat er automatisch na de /..... tekst word aangemaakt als iemand een filmpje upload.
Is het belangrijk dat de video's niet voor iedere willekeurige gebruiker toegankelijk zijn die een hash kan raden of berekenen?
In welk geval extra maatregelen mogelijk op zijn plaats zijn.
Security through obscurity (het voor dit doel gebruik maken van hashing) is nooit een goede oplossing. Het genereren van een unieke string is natuurlijk prima voor het uniek identificeren van een filmpje, maar niet echt voor het afschermen van ongewenste bezoekers. Denk ook bijvoorbeeld aan het oppikken van dit soort media door zoekmachines als verder op geen enkele manier de content zelf wordt afgeschermd.
Het codefragment van @Mitchell baart mij wel een beetje zorgen, het lijkt alsof je:
- het weergeven van het formulier,
- het verwerken van het formulier, en
- het afhandelen van foutmeldingen
allemaal op dezelfde plek regelt? De kans is dan groot dat code vrij snel één onoverzichtelijke brei wordt. Wanneer je complexere dingen gaat doen is het (of wordt het steeds) belangrijk(er) dat je je code overzichtelijk houdt. Een eerste stap daartoe zou het scheiden van de eerder genoemde acties zijn in verschillende compartimenten, in wat voor vorm dan ook (aparte PHP-bestanden of methoden van een klasse of wat dan ook).
Zorg dat je het overzicht houdt, dan kun je dingen ook beter in afzondering behandelen, zoals het toevoegen van logica in de afhandeling van een form-submit. Op dit moment moet je dit ergens tussenbreien in een monolitisch stuk code, wat mogelijk weer andere dingen omver trekt.
Ah, na de opmerking van Obelix en Idefix had ik niet eens verder gekeken. Maar hier kunnen inderdaad een hoop dingen mis gaan:
- Een bestandsnaam ($name) kan aanhalingstekens (') bevatten, dan gaat je query de mist in (SQL-injectie).
- Dito voor $extension.
- De extensie kan ".php" zijn (extensie en MIME $type zijn twee heel aparte dingen; ik kan dus een .php bestand uploaden met een video/mpg MIME -> http://php.net/manual/en/curlfile.construct.php). Dat bestand komt dan in /upload/ te staan, en dan kan ik dus gewoon allerlei scripts uitvoeren op de server = volledige controle).
Hm, nu kun je alles uploaden (MIME wordt ook niet meer gecontroleerd). Je kunt dus gewoon een PHP bestand uploaden, enz.
Daarnaast raad ik je aan om eens iets over SQL-injectie te lezen, want bij het uploaden was het nog enigszins complex, maar in watch.php kun je gewoon helemaal los gaan met het $id (maar nogmaals: als je een PHP bestand kunt uploaden maakt het iet zo heel veel meer uit).