Als Basis für den filemanager soll eine kleine Klasse bilden, die später allgemein zugänglich in django-tools einfließen soll. Momentan sind allerdings die sourcen, der einfachkeitshalber noch hier: https://github.com/jedie/PyLucid/tree/m ... ilemanager
Diese Basis Lib soll nur die Grundfunktionen liefern in einem Basis Pfad navigieren zu können.
Die Frage ist nun, wie kann man sicher verhindern das der User aus dem Basis Pfad ausbrechen kann? Also wie kann man ein sog. "Directory Traversal Attack" erkennen bzw. verhindern?
z.Z. mache ich es quasi so (Pseudocode):
Code: Alles auswählen
# urls.py
urlpatterns = patterns('',
url(r'^filemanager/(?P<rest_url>.*?)$', views.filemanager),
)
# im view:
UNAUTHORIZED_SIGNS = ("..", "//", "\\")
for sign in UNAUTHORIZED_SIGNS:
if sign in rest_url:
raise 500
BASE_PATH = settings.STATIC_ROOT
abs_path = os.path.normpath(os.path.join(BASE_PATH, rel_path))
if not abs_path.startswith(BASE_PATH):
raise 500
https://github.com/jedie/PyLucid/blob/m ... lemanager/
https://github.com/jedie/PyLucid/blob/m ... lemanager/
Die Frage ist, ob ich damit alles abdecke?
Hab mir auch überlegt, das die "user eingabe" also die rein kommende rel_path mehr auf Sonderzeichen absuchen soll. Doch nur Buchstaben/Zahlen erlauben würde auch "normale" Umlaute usw. ausschließen.
Meinungen dazu?