Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
Ich wollte die nun bei unserem _bestehenden_ System durch eine möglichst simple und für nachfolgende Betreuer leicht verständliche Anprogrammierung schließen. Bisher werden nämlich immer die URLs der Bilder, die dann auch noch in einem Verzeichnis innerhalb der Document Root liegen, in der Antwort auf den Primärrequest der Ressource (MRD = Main Response Document, so heißt das bei uns zumindest) ausgegeben. Das ist kritisch, da z.B. Bilder von Mitgliedern der Community nur genau einer bestimmten Gruppe der Community zugänglich sein dürfen. Man könnte theoretisch das Verzeichnis durchklappern, ob man Treffer findet.
1.) Ersteinmal könnte man das Bilderverzeichnis (gilt aber auch sinngemäß für alle anderen MIME-Types) aus der DocRoot rausnehmen.
2.) Dann könnte man die zu sichernden Documents mit einem kryptischen Namen, ähnlich dem Sessionnamen von PHP versehen. Das verringert schon einmal die Trefferquote um Faktor (Namensvorrat/Anzahl der Dateien). Das Verhältnis dürfte selbst bei 1.000.000 Dokumente noch hoch genug liegen, dass es als _relativ_ sicher gelten kann.
3.) Da der Zugriff nun nur noch per Skript möglich ist, könnte man dessen Ausführung auch noch von einger gültigen Session abhängig machen.
4.) Da es nun möglich ist, Fehlversuche genau dem Sessionbesitzer zuzuordnen, könnte man nach z.B. 10 Fehlversuchen den Benutzer sperren.
5.) Schlussendlich könnte man die Ressourcelocators auch noch verschlüsseln, was dann aber zu extrem langen Ressourcekennungen (RUL-Encode lässt grüßen) führen könnte. Und die Sicherheit würde vermutlich aufgrund des ohnehin schon riesigen Namensvorrates nicht erhöht werden. Die Ergebnisse werden vermutlich ohnehin aus derselben Zielmenge stamnmen.
Was spart man dadurch?
- Keine zusätzlichen Datenbankzugriffe für Sekundärerequests nötig.
- Keine Instantiierung des Gesamtsystems bei jedem Sekundärrequest nötig.
- Kein Eingriff in die grundlegende Sicherheitsarchitektur des Systems nötig
Die Sessiondatei wird ohnehin geladen, die Datei mit den Hauptfunktionen auch. Man kann die Sekundärrequests auch mit einem Minimalskript abarebiten, das ausschließlich die Config-Dateien benötigt und die Session aufrufen muss, um festzustellen, ob die Gültig ist.
Leider hatte das Ganze so einfach doch eine Lücke. Die ältere Idee war besser!
Wenn man nicht will, dass für Subrequests auf authorisierte Elemente die ganze Abfrage wieder zur Verfügung stehen muss (Der Query-String müsste dann an jeder URL dranhängen und auch ausgewertet werden), dann hat man gar keine andere Wahl, als die authorisierten Elemente in der Session zu referenzieren.
Dann ist aber wieder die Frage, wie man mehrere Requests gleichzeitig bedient, oder ob man einfach die "authorised elements" solange in der Session hält, wie die gültig ist. Wenn der Besucher ein Bild auf Seite 12 authorisiert bekommen hat, warum sollte es ihm dann auf Seite 14 nicht mehr zur Verfügung stehen. Schließlich ist es dasselbe Bild und vermutlich auch dieselbe URL dafür?
Man könnte aber ggf. den "Elements-Translation-Table" bei jedem Request bereinigen und die zu alten Einträge wieder raussschmeißen.
Das bedeutet dann, dass jeder Primary-Request einheitlich Elemente authorisieren kann und auch die zu alten rausschmeißt. Das Abfragescript für Secondary-Requests würde dann nur einen einheitlichen Zugriff auf das jeweilige Element kennen, der immer per Mod-Rewrite auf ein Script umgeleitet wird, dass danach zu schauen hat, ob eine Session besteht, diese noch aktiv ist (die Sessiondatei darf durchaus noch Tage weiterbestehen), ggf. das Aufräumen vornimmt und schaut, ob das geforderte Element in der Authorisierungsliste steht und dieses dann ausliefert.
Ich habe den Themenbereich geändert, weil es eine Eigenart des HTTP-Protokolls und von HTML & Co. ist, dass man derartige Aufgabenstellungen lösen muss. Es würde bestimmt auch zu "PROGRAMMIERTECHNIK" passen, aber nicht ursprünglich.
Wäre wirklich mal toll, hier von Fachleuten durchdachte Diskussionsbeiträge zu meinen Gedanken zu bekommen. Und 'Ja!': Ich werde mich damit beschäftigen, wenn sie ausreichend verständlilch dargeboten werden und nicht einfach nur Brocken hingeworfen werden, deren Kontext ich nicht kenne und die nur zum Ausdruck bringen sollen, dass alles Quatsch sei, das ich mir ausdenke.
Das wäre dann keine Diskussion, das wäre Mobbing!
Ich habe dieses Forum mal vor über 10 Jahren kennengelernt - da war es für mich das beste von allen!
Spirituelle Grüße
Euer Robert
Möge der Forumsgeist wiederbelebt werden!