Citat:
Ursprungligen postat av
Enterprise
Jag har lärt mig att man bör undvika alla användargenerade filer i publika delen. Om det ligger utanför detta så är det omöjligt att hämta filen genom att lista ut någon URL. Jag pratar utifrån perspektivet Apache2 på Linux.
Ja, webbservern är normalt sandboxad, men skript som man själv skriver kan komma åt andra delar av filsystemet.
Jag insåg nu att mitt exempel nog var lite dumt då det bygger på en teknik där man i sin .htaccess (om man använder Apache) skickar alla request som inte har någon motsvarande fil eller mapp till index.php enligt följande:
Citat:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Och att man efter det sedan hanterar de requesten i sin egen applikation.
Detta gör att om en användare t.ex. efterfrågar
https://example.com/uploads/namn_pa_fil.jpg, och "/uploads/namn_pa_fil.jpg" inte existerar, så kan man själv bestämma hur man vill svara på det anropet, genom att t.ex. läsa "namn_pa_fil.jpg" från en helt annan plats.
Ett bättre exempel hade förmodligen varit:
https://example.com/gallery.php?image=namn_pa_fil.jpg
Min poäng var bara att webapplikationen kan bli sårbar för path traversal om man bestämmer sig för att göra en egen lösning för att läsa filer som ligger utanför den publika delen.
Om en uppladdad fil över huvud taget inte ska gå att komma åt av användare i efterhand så är det väll lämpligt att lägga den utanför den publika delen förstås.
Men ska t.ex. en uppladdad bild visas på hemsidan någonstans så kommer man i sådant fall att behöva göra ett eget skript för att läsa och presentera den filen, och där behöver man vara lite på sin vakt i så fall.