fk2868: Bild nur bei vorhandenen Zugriffrechten einfügen: Javascript

Beitrag lesen

Hi,

»» Wenn ich mittels
»»   <img src="bild">
»» ein Bild in ein HTML-Dokument einbinde, als aktueller Benutzer aber keine Zugriffsrechte darauf habe, fragt IE wie FF erneut nach einem Login/Passwort.

Du redest als von HTTP Authentication?

»»
Ja.

Natuerlich muessen die Browser da "nachfragen" - es ist ja schliesslich noch gar nicht klar, ob der Benutzer Berechtigung zum Abruf dieser Ressource hat oder nicht.

Wenn er es einmal machen würde, könnte ich damit leben.
Er stellt aber für jedes Element immer wieder die gleiche Frage, Firefox macht das noch parallel und reißt sich in den Abgrund. IE arbeitet etwas gutmütiger.

»» Apache .httaccess mit
»»
»»   <FilesMatch ".(jpeg|jpg|png|gif)$">
»»   ErrorDocument 404 /image/noAccess.png
»»   </FilesMatch>
»»
»» hilft nicht weiter,

Natuerlich nicht. Zum ersten erst mal deshalb, weil der Statuscode 404 damit herzlich wenig zu tun hat. Kann der Benutzer keine gueltigen Credentials vorweisen, lautet die Antwort 401 Unauthorized.

Ich MEINTE 401.
Ich kann die Daten auch vollständig übertragen, dann können inhaltliche Kürzungsfehler nicht auftreten. Allerdings ist das dann nicht mehr lesbar.

»» der Login-Dialog kommt vor dem Ersetzen. Login-Dialog, Wegclicken, erst dann wird das Bild ersetzt.

Natuerlich, siehe oben. Bevor er nachfragt, kann der Client ja noch nicht wissen, ob der Benutzer berechtigt ist, die Ressource abzurufen. Erst wenn dieser durch "Wegklicken" der Zugangsdatenabfrage klar macht, dass er keine Zugangsdaten eingeben moechte, weiss der Client, dass er die gewuenschte Ressource vom Server nicht erhalten wird - und kann dann stattdessen ggf. die Bildressource ausgeben, die vom Server als Alternativinhalt mit der 401-Antwort geliefert wurde, bzw. einen "broken image"-Platzhalter anzeigen.

Prinzipiell richtig. Wenn es aber danach geht, kann man 95% der Features von Apache und 80% der Features von Firefox entsorgen, weil man sie eigentlich nicht braucht.

Es geht darum, daß Webseite aus ca. 1000 Elementen besteht, und je nach Nutzer nur auf 700 bis 1000 Elemente Zugriffsrechte hat. Die 300 bis 0 nicht zugreifbaren Elemente sind in der gleichen Realm.

Der FF und IE puffert zwar erfolgreiche Auth ab, nicht erfolgreiche wiederholt er aber ohne Gnade.

»» Geht so was dynamisch per Javascript? Zugriff testen, abhängig vom Ergebnis
»» Codesnippet1 oder Codesnippet2 einfügen?

Per JavaScript koenntest du zwar ggf. abfragen, ob eine Bildressource fehlerfrei geladen werden konnte - aber schon beim Versuch, diese vom Server anzufordern, wird wieder die Abfrage der Zugangsdaten kommen.

Kann man das unterbinden?

Entweder darf der Client nur für fehlgeschlagende HTML-Dokumente nach einem weiteren Versuch für Login+Passwd betteln oder der Server darf für bestimmte Dokumente kein 401 bringen (was prinzipiell geht, wenn man sich an den Quellen vergreift).

»» Abhängig von den Zugriffsrechten des aktuellen Betrachters auf /dir1/bild.png ohne das Anfordern weiterer Passwörter.

Sorge dafuer, dass die das Bild einbindende Ressource und die Bildressourcen innerhalb des gleichen Zugangsbereiches ("Realm") liegen - dann muss der Benutzer die Daten nur einmal eingeben, der Client "merkt" sie sich und schickt sie bei weiteren Anfragen nach Ressourcen aus dem gleichen Realm automatisch selber an den Server.

Der Benutzer hat keine Rechte auf diese Elemente. Der Browser probiert das aber für jedes Element aus.

* Lege eine HTML-Datei an.
* lege diese auf einem Server ab, ob geschützt oder ungeschützt, ist egal.
* Füge 500 kleine Icons von ein und der selben geschützten Webseite ein.

Der Client fragt 500 mal die gleiche Frage. Bei einem Reload noch 500x. Der glaubt Dir nicht, daß Du das Passwort nicht weißt.