Benutzerdefinierte Anmeldung ASP.NET C #

8

Ich mache gerade eine benutzerdefinierte Anmeldung in ASP.NET. Ich habe den Code des Login-Steuerelements geändert, um meine Datenbank anstelle der Aspnet-Tabelle zu verwenden. Hier ist ein Beispiel meines Codes;

%Vor%

Ich habe eine andere Datenbank für die Admin-Benutzer. Meine Frage ist, wie kann ich die Datenbank für die Admin-Benutzer überprüfen lassen? Wie kann ich auch normale Benutzer von bestimmten Seiten wie ~ Admin / AdminPages.aspx einschränken? Ich versuche gerade This .

Jede Hilfe wäre sehr willkommen;)

Vielen Dank im Voraus

    
Loupi 28.04.2011, 03:40
quelle

4 Antworten

20

Ok, also werde ich das sagen, aber wisst, dass ich es auf die schönste Weise meine ...

Sie machen es falsch!

Ich streite nicht gegen die Verwendung einer benutzerdefinierten Datenbank, obwohl Asp.Net bereits hat das eingebaut. Ich argumentiere nicht einmal dagegen Handcodierung dies in einer Methode, wenn Sie die sehr nettes Pluggable-Provider-Modell , das Asp.Net eingebaut hat. Was ich argumentiere, ist, wie weit geöffnet dieser Code für ein SQL Injection Angriff.

Überlege kurz, was passieren würde, wenn ich x'; DROP TABLE Users; -- als Benutzernamen eingeben würde? BAD THINGS MAN !!!!

Ok, also folge ernsthaft den Links, die ich dort hineinlege und bitte, bitte, bitte zumindest benutze parametrisierte Abfragen!

    
Josh 28.04.2011, 04:05
quelle
5

Mit dem von Ihnen geposteten Code stimmt einiges nicht.

string strSQL = "Select * from dbo.Users where Username ='" + uname + "' and Password ='" + password + "'";

NIEMALS KEINE Verkettung von Strings, um eine Abfrage zu erstellen. Dadurch bleibt Ihre Anwendung für SQL Injection offen. Verwenden Sie stattdessen eine parametrisierte Abfrage.

Warum haben Sie eine separate Datenbank für Administratoren und allgemeine Benutzer? Würden Sie nicht alle Logins in einer einzigen Tabelle in einer einzigen Datenbank speichern? Verwenden Sie dann entweder ein einzelnes Feld "IsAdmin" oder verwenden Sie eine separate Tabelle "Rollen" und die Tabelle "UsersInRoles", um festzustellen, welche Benutzer Admin sind oder nicht.

Was ist der Grund dafür, dass Sie den integrierten Mitgliedschaftsanbieter nicht verwenden? Sie konfigurieren den integrierten Provider so, dass er jede Datenbank verwendet, nicht nur AppData \ aspnet.mdf.

Normalerweise beschränken Sie verschiedene Seiten auf verschiedene Benutzer, die Rollen verwenden. Dies kann in der Datei web.config im Autorisierungselement festgelegt werden.

Wenn Sie wirklich ein benutzerdefiniertes einfaches Authentifizierungssystem erstellen möchten, verwenden Sie so etwas wie Ссылка um die Benutzerrollen manuell der Benutzeridentität zuzuordnen.

    
James Harris 28.04.2011 04:12
quelle
2

Ich denke wirklich, dass Sie Datenbankverbindungsparameter nicht fest codieren sollten. Ist eine schlechte Übung, denn wenn sich die DB ändert, müssen Sie neu kompilieren. Sie müssen also einen benutzerdefinierten Mitgliedschafts- und Rollenanbieter implementieren. Siehe diesen Artikel. Grundsätzlich müssen Sie eine benutzerdefinierte Klasse erstellen, die erbt von System.Web.Security.RoleProvider und System.Web.Security.MembershipProvider. Mitgliedschaft verwaltet Benutzer und Rollen, gut .. Benutzerberechtigungen.

Nachdem alles festgelegt wurde, können Sie Benutzerberechtigungen über die Page.User-Eigenschaft in Ihrer aspx-Seitencode-Behind-Datei überprüfen.

    
Luis Aguilar 28.04.2011 04:02
quelle
2

Um meine Stimme zu der Mischung hinzuzufügen. Wer nicht aus der Geschichte lernt, ist dazu verdammt, es zu wiederholen. Das ASP.NET-Mitgliedschaftssystem ist das Ergebnis jahrelanger Versuche, eigene Benutzerauthentifizierungssysteme zu implementieren. Microsoft hat daraus gelernt. Also solltest du.

Verwenden Sie das Mitgliedschaftsanbietermodell. Wenn Sie den Standardanbieter nicht verwenden möchten, implementieren Sie Ihren eigenen benutzerdefinierten. Aber ehrlich gesagt ist es sehr einfach, den integrierten Provider zu verwenden und ihn an alles anzupassen, was Sie wollen.

    
Erik Funkenbusch 28.04.2011 04:15
quelle