2016-08-02 25 views
0

Ich habe eine Seite, die beim Zugriff einige sensible Informationen enthält. Ich verstehe, dass es bessere Möglichkeiten gibt, wie Active Directory usw., aber ich strebe im Moment den einfachsten Weg an.ASP.Net - C# Wie man eine passwortgeschützte Ansicht erstellt, so dass die Daten auf der Seite geschützt sind, bis das Passwort korrekt ist

Gibt es eine Möglichkeit, den Benutzer über ein Textfeld per Textbox aufzufordern, ob mit einer Warnung oder einer anderen Methode, die das anzuzeigende DOM über "Seitenquelle anzeigen" anhalten soll? Also, wenn falsch eingegeben, wird die Ansicht nicht zurückgegeben?

Könnte jemand bitte ein Codebeispiel bereitstellen?

Die Seite, die ich von ihr zu dieser Action wird aufgerufen haben:

public ActionResult ViewRecords() { 
    return View(); 
} 

Gibt es trotzdem zu machen, ist, so dass der Code auf der richtigen Saite verläßt sich oben wie so übergeben werden:

public ActionResult ViewRecords() { 

    alert(//some sort of text box//); 

    if (string == 'password') 
     return View; 
    else 
     return View("Index.cshtml"); 
} 

Ich habe einige Nachforschungen gemacht und festgestellt, dass einige Leute dies durch eine Webconfig-Definition tun, aber ich bin verwirrt über den genauen Code, den ich sowohl in meine web.config, C# Controller-Datei, und .cshtml anzeigen, um diese Arbeit zu machen.

+4

Senden Sie die vertraulichen Informationen nicht an den Browser, bis der Benutzer authentifiziert ist. Wenn Sie den Effekt erzielen möchten, dass zwischen dem Anmelden und dem Anzeigen der Daten keine vollständige Aktualisierung der Seite erfolgt, verwenden Sie AJAX, um die vertraulichen Informationen abzurufen, nachdem der Benutzer authentifiziert wurde. – mbeckish

+0

Sie denken an diese Controller-Aktion falsch. Wenn sie "ActionResult" anfordern, wird sie nicht anhalten und dann eine Warnung zurückgeben, Text empfangen und dann fortfahren. Sobald es dem Benutzer etwas zurückgibt, ist es erledigt. – mmcrae

+0

@mbeckish was wäre eine Möglichkeit, dies mit AngularJS und AJAX zu tun? – NoReceipt4Panda

Antwort

0
[Http.Get] 
public ActionResult SafePage() { 
    return View("PageThatPromptsForPassword"); 
} 

inside "PageThatPromptsForPassword" Ansicht, schreiben einige JS den Benutzer nach einem Kennwort gefragt. Übergeben Sie es (mit AJAX oder einem Formular) an eine zweite Controller-Aktion, um es zu überprüfen.

[Http.POST] 
public ActionResult ConfirmPassword(string passWord) { 
    if (passWord == MY_SECRET_PASSWORD) { 
     return View("SecretInformationPage"); 
    } else { 
     return View ("PageThatPromptsForPassword"); 
    } 
} 

** Beachten Sie, dass dies, wie Sie wissen, sehr einfach ist und potenzielle Sicherheitsprobleme haben kann. Aber es ist ein Ausgangspunkt.

+0

Wäre es nicht möglich, einfach "example.com/Data/SecretInformationPage" einzugeben, statt "example.com/Data/PageThatPromptsForPassword" zu verwenden? – NoReceipt4Panda

+0

Nur wenn Sie das als Route zu einem Controller haben, der die sensitive Ansicht zurückgibt. Ich schlage vor, dass Sie keine Weiterleitung erteilen/eine URL haben, die zu den sensiblen Informationen führt. Erstellen Sie einfach eine Ansicht mit diesen vertraulichen Informationen und geben Sie sie zurück, nachdem Sie das Passwort überprüft haben. – mmcrae

+0

Das Problem ist, dass jeder nur die zweite (umgeleitete Seite) mit geheimen Informationen besuchen kann, ohne die passwortgeschützte Seite überhaupt besucht zu haben. – NoReceipt4Panda