3 Stimmen

Unsicheres Posten von einem ASP.NET-Steuerelement auf einer sicheren Seite unter Vermeidung der Authentifizierung

Wir verwenden die Standard-ASP.NET-Formularauthentifizierung. Einige Seiten erfordern, dass sich ein Benutzer anmeldet, und zumindest einige dieser Seiten werden über https geliefert. An der Spitze jeder Seite befindet sich eine Suchsteuerung. Wenn diese verwendet wird, ist es uns egal, ob die Sitzung des Benutzers abgelaufen ist, auch wenn die aktuelle Seite eine Anmeldung erfordert.

Derzeit jedoch, wenn die Suche durchgeführt wird, erkennt die integrierte Formulauthentifizierung, dass die Seite, an die Daten gesendet werden, eine Authentifizierung erfordert, und leitet den Benutzer zur Anmeldeseite weiter, wobei die vorherige Seite, nicht die Suchergebnisseite, als Referrer verwendet wird.

Was ist der beste Weg, um hier die Sicherheit zu umgehen? Ich habe in Betracht gezogen, an eine andere Seite zu senden, die PostBackUrl-Eigenschaft zu verwenden, aber falls dies nicht https ist, erscheint die Meldung "Sie senden Daten an eine unsichere Verbindung", was Benutzer nicht mögen.

Vielen Dank für jede Hilfe.

Bearbeitung: Danke Nick für deinen Vorschlag, auf der Suchseite ein GET zu verwenden. Das machen wir bereits, aber die Abfragezeichenfolge wird vom Suchsteuerungselement konstruiert und dann weitergeleitet. Wie können wir die Abfragezeichenfolge aufbauen, ohne ein Postback zu verwenden? (Natürlich ist Javascript eine Option, aber ich hoffte, einen alternativen Mechanismus zu finden.)

2voto

Nick Berardi Punkte 53415

Für die Suchseite möchten Sie sicherstellen, dass die Suche über eine GET-Anfrage erfolgt. (d.h. wie bei google mit dem "q" in der Abfragezeichenfolge) Wahrscheinlich verwenden Sie POST.

Also ändern Sie Ihr

zu

Der größte Fehler, den die meisten Entwickler bei Suchseiten machen, besteht darin, einen POST zurückzugeben. HTTP wurde entwickelt, um Abfragen oder Suchvorgänge über die Abfragezeichenfolge (daher der Name) durchzuführen, und um ein Formular an eine Abfragezeichenfolge anstelle des Inhalts zu senden, müssen Sie eine Methode "GET" verwenden. Auf diese Weise kann jede Suchmaschine Ihre Suchseite verwenden, auch die Suchleiste des Browsers.

Zweitens möchten Sie eine spezielle Standortkonfiguration für Ihre Suchseite erstellen. Fügen Sie dies Ihrer web.config hinzu.

Dies erstellt eine spezielle Überschreibung für diese eine Seite und alles innerhalb des Standorttags verwendet die exakt gleiche web.config-Struktur, um die web.config zu überschreiben.

Sie möchten dies für jede Seite wiederholen, für die Sie allen Benutzern Zugriff gewähren möchten.

1voto

TheAlbear Punkte 5385

Wenn die Suchergebnisseite ein Postback durchführt, wird das Seitenladungsereignis ausgelöst, bevor auf Ihre Suchschaltfläche geklickt wird.

Wenn sich die Seite, auf der sie sich befinden, einloggen musste, wird der Login-Befehl ausgeführt, bevor das Suchschaltflächenklickereignis sie zur Login-Seite zurücksendet.

Es gibt ein paar Möglichkeiten, dies zu umgehen: Machen Sie die Suche zu einem normalen HTML-Formular und führen Sie eine GET-Operation durch, nicht eine POST-Operation, wie von "Nick" erwähnt.

Oder, wenn die gesamte Seite innerhalb eines .NET-Postback-Formulars ist, müssen Sie das Suchschaltflächenergeignis zu einer Überladung des Seitenladens hinzufügen, damit es zuerst ausgelöst wird.

Diese Seite hat einen guten Artikel über den Seitenlebenszyklus und seine Überschreibungen. http://www.15seconds.com/issue/020102.htm

0voto

Gaz Punkte 3944

Wie in anderen Antworten vorgeschlagen, wäre der korrekteste Weg, dies zu tun, die Sucheingabe-Steuerung in einem separaten Formular zu haben, das eine Methode von get und eine Aktion von searchresults.aspx hat. Dies ist jedoch schwierig mit aspx, da Sie nur ein serverseitiges Formular auf einer Seite haben können.

Letztendlich kam ich zu der Lösung, die sehr gut funktioniert, indem ich ein HttpModule erstellt habe, das erkannte, ob auf die Schaltfläche "Suche" geklickt wurde (indem es überprüfte, ob ein Parameter mit seiner ID existierte), dann eine Abfragezeichenfolge erstellte, indem es nach den Kriterienparametern suchte und zur Suchergebnisseite umleitete. Dies bedeutet, dass alle Authentifizierungs-/Autorisierungs-Module umgangen werden, da wir bereits eine Umleitung zur (unbesicherten) Suchergebnisseite aufgerufen haben, bevor sie ausgelöst werden.

Es ist etwas anfällig, aber für uns funktioniert es sehr gut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X