Nicht authentifizierte Benutzer können keine Bilder in der Website sehen

8

Wenn ich meine Website im Visual Studio über den Debug-Modus laufe, sieht alles gut aus und alle Bilder auf der Seite zeigen sich gut. Aber sobald ich meine Website auf einem IIS7-Webserver bereitstellen (bezweifle, dass andere Versionen einen Unterschied machen würden, aber Sie nie wissen), dann können Benutzer die Bilder auf der Website nicht sehen, bis sie sich einloggen.

Die Website ist eine asp.net MVC-Site und ich bin neu bei MVC, obwohl ich sehr viel Erfahrung mit asp.net-Formularen habe. Es scheint, dass nur authentifizierte Benutzer auf den Bilderordner zugreifen dürfen, und in meiner web.config gibt es einen Autorisierungsabschnitt, der besagt, dass nur Administratoren auf die Site zugreifen können. Wie kann ich also sicherstellen, dass alle Benutzer authentifiziert oder auf andere Weise angezeigt werden können die Bilder?

- Aktualisieren -

Ich habe versucht, den vorgeschlagenen Konfigurationsblock einzubauen, der von allem, was ich sagen kann, vollkommen Sinn ergibt, aber es schien keinen Unterschied zu machen. Das folgende Beispiel hat Inhalt / Bilder für den Pfad, aber vorher habe ich nur Inhalt ausprobiert, da es OK ist, dass alles darin zugänglich ist. Ich habe auch versucht, die Einstellung allowOverride auf false zu setzen, was ebenfalls keinen Unterschied zu machen schien.

%Vor%

- Update 2 - Lustig ist, dass ich in meiner web.config keine expliziten Verweigerungseinträge sehe, nur eine Erlaubnis für Admins, und als ich in IIS 7 ging und die UI benutzte, um allen Benutzern den Zugriff auf das Content-Verzeichnis zu erlauben zeige auch irgendwelche Verweigerungen auf der Liste an. Aber dann funktioniert dieses Projekt gut, wenn ich es nur von meinem PC aus debugge, erst nachdem ich es bereitgestellt habe, habe ich Probleme ...

%Vor%     
Peter 07.11.2010, 04:16
quelle

7 Antworten

14

Fügen Sie in Ihrer Datei "web.config" nach dem </system.web> -Tag Folgendes hinzu:

%Vor%

Dabei ist path="images" der Name des Ordners mit Ihren Bildern / CSS.

Aktualisierung:

Wenn Sie ASP.NET MVC verwenden, würde ich die Autorisierungsdeklaration in der Datei web.config entfernen und das Attribut [Authorize] auf den Controllern verwenden, die gesperrt werden müssen.

Sie können auch die Rollen angeben, denen Sie den Zugriff auf [Authorize("admin")] gewähren möchten.

    
Omar 07.11.2010 06:41
quelle
6

Die Konfiguration, die Sie in einer Datei Web.config definieren, gilt standardmäßig für jedes Unterverzeichnis seines enthaltenden Ordners. Wenn Sie eine Web.config im Anwendungsstammverzeichnis haben, wird diese Konfiguration in jedes Unterverzeichnis übertragen, einschließlich derjenigen, in denen Sie Bilder und CSS-Stylesheets haben. Also, wenn Sie in Ihrer Web.config eine Regel wie diese haben:

%Vor%

Anonyme Benutzer können nicht auf die Ressourcen zugreifen, die zum Anzeigen der Seite erforderlich sind, wie Sie es erwarten würden.

Um es zu beheben, müssen Sie eine weitere Datei Web.config in jedes Unterverzeichnis mit Präsentationsressourcen einfügen und die Regeln anwenden, die Sie überschreiben möchten. In Ihrem Fall sollte dies die Arbeit machen:

%Vor%

Wenn Sie Designs verwenden, legen Sie eine einzelne Web.config-Datei in den Designordner.

    
eXe 03.03.2012 20:08
quelle
5

Ich bin gerade auf dasselbe Problem gestoßen. Wir haben es auf unserer Anmeldeseite bemerkt. Das CSS und die Bilder wurden nicht geladen (sie befanden sich unter dem Inhaltsverzeichnis). Das Hinzufügen von IUSR zum Ordner mit Leseberechtigungen hat es für uns behoben.

    
Josh 01.08.2013 16:29
quelle
2

Alte Frage, aber ich stieß auf das gleiche Problem und fand die Antwort. Ich hatte einen neuen Ordner für die Mitgliedschaftsseiten erstellt, auf den die angemeldeten Benutzer Zugriff haben sollten, aber die Bilder wurden nicht in ihnen angezeigt! Es stellt sich heraus, dass ich, egal was ich versuchte, konnte ich keinen relativen Pfad zu den Bildern aus dem Ordner Mitglieder festlegen.

Das Problem war das html-Bild (soweit ich das beurteilen konnte, korrigiere mich, wenn ich falsch liege). Ich habe es gegen einen asp:image mit einem relativen Pfad getauscht und jetzt funktioniert es großartig. Mein neuer Code: asp:image runat="server" id="Logo" ImageUrl="~/Images/logo.jpg"

Beachten Sie das '~ /', das würde bei mir nicht funktionieren Ich habe versucht: img src="../Images/logo.jpg" , img src="~/Images/logo.jpg" , img src="/Images/logo.jpg" usw. ohne Erfolg.

Ich hoffe, diese Antwort hilft jemandem, dieses Problem in Zukunft schneller zu lösen.

    
Alperon 10.12.2012 18:33
quelle
1

Versuchen Sie, die Bilddatei direkt zu durchsuchen und zu überprüfen, ob dies für einen anonymen Benutzer geschieht. In IIS 7 gibt es eine Möglichkeit, anonyme Benutzer direkt von Ihrer Benutzeroberfläche aus zu autorisieren [die wiederum die Datei web.config erstellt, falls sie nicht existiert].

Ordner - & gt; .NET-Autorisierungsregeln - & gt; Regel hinzufügen

hinzufügen     
Rahul Soni 07.11.2010 05:17
quelle
0

Verwenden Sie den Mitgliederrahmen? Ich vermute, dass Sie Ihre Berechtigungseinstellungen in web.config falsch konfiguriert haben und Ihr Bilderordner nur autorisierte Anfragen erlaubt. Dies kann leicht über web.config geändert werden. Entfernen Sie einfach den Ordnernamen aus Ihrem autorisierten Bereich und das sollte das Problem lösen.

Als Referenz sollte dies der Abschnitt in web.config sein, wenn Sie das Framework für die Mitgliedschaft verwenden:

%Vor%     
Naveen 07.11.2010 06:39
quelle
0

Wir stießen auf das gleiche Problem in unserem Projekt und fanden eine Lösung, obwohl wir uns über die Gründe für dieses Verhalten nicht sicher sind.

Wir hatten ein ähnliches Szenario mit einem Ordner, der all unsere PNG-Bilder enthält. Unser Marketingkollege wollte einige von ihnen umbenennen, um es ihr leichter zu machen, teilten wir (das könnte der Schlüssel sein) diesen Ordner und gewährten ihr Lese- / Schreibrechte.

Von diesem Punkt an begannen sich die Bilder so zu verhalten, wie Sie es beschreiben, und benötigen eine Berechtigung für den Zugriff. Kein unbefugter Benutzer konnte sie mehr sehen.

Wir haben festgestellt, dass das Problem mit der Freigabe des Ordners zusammenhängt, weil es zu diesem Zeitpunkt bereits begonnen hat. Ansonsten sehen wir immer noch keine Beziehung zwischen ASP.NET MVP Benutzerautorisierung / Login und Festplattenbenutzerrechten. Wir hätten eine IO Exception oder etwas Ähnliches erwarten können, aber nicht dieses Verhalten.

Nachdem wir den Ordner überprüft und mit anderen Ordnern verglichen hatten, stellten wir fest, dass sich die Berechtigungen für den Ordner nach der Freigabe leicht geändert hatten. Hauptsächlich erbten sie nicht mehr von ihrem übergeordneten Ordner und einige Berechtigungen wie CREATOR OWNER und MACHINE_NAME \ Users waren verschwunden (obwohl IUSR und der App-Pool-Benutzer immer noch da waren).

Also haben wir diesen Ordner umbenannt, einen neuen mit dem gleichen Namen erstellt und den Inhalt vom alten Ordner in den neuen kopiert. Der neue Ordner hatte die Berechtigungen von seinem Eltern geerbt und alles begann wieder perfekt zu funktionieren.

Es hat unser Problem gelöst, aber wir sind uns immer noch nicht sicher, warum das alles so passiert ist.

Grüße

    
Jaime 01.08.2013 08:05
quelle

Tags und Links