[ASP] pagina-authorisaties afhandelen

Pagina: 1
Acties:

  • haroldd
  • Registratie: April 2004
  • Laatst online: 22-03 21:11
hoi,

ik ben een website aan het bouwen met een eigen inlog systeem. Ik heb daarvoor in de database een tabel gebruiker, groep en menu. Daarmee kan ik afvangen dat het menu afhankelijk van de rechten van de gebruiker wordt opgebouwd.
Maar een willekeurige gebruiker kan dan natuurlijk wel nog met wat creatief raden handmatig de links naar bijvoorbeeld de beheerpagina intypen en er zo op terecht komen.

Nou had ik al geprobeerd door m.b.v. een session variabele te kijken of de gebruiker is ingelogd en aan de hand daarvan wel of geen toegang tot een pagina te geven. Maar dat helpt niet zodra de gebruiker inlogt als "gebruiker x" en vervolgens de link intypt in de browser.

moet ik dan iedere pagina in de database gaan opnemen en daar de groepen rechten op gaan geven?
of zou dit ook met de mappen kunnen waarin de pagina's zijn opgeslagen? (bedenk ik me nu net pas). Of zijn hier betere manieren voor?

Werken is gezond, laat het daarom over aan de zieken!


  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 08-05 16:07
Je moet dus voorbij een login komen.
Wat je kunt doen is een status ingelogd ja of nee in je sessie zetten.
En een timestamp in je sessie.
Op elke pagina die je na de login aanroept check je op deze variabele en met de timestamp zou je de sessie een max. tijd kunnen geven zodat je deze na bijv. 10min automatisch laat aflopen. De user moet dan opnieuw inloggen.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Het is wel zo veilig om op de pagina zelf te controleren of iemand toegang heeft. Je kunt de gebruiker dan gelijk informeren. Maar er leiden meer wegen naar Rome, ik zou gewoon eens goed inlezen op het web

oogjes open, snaveltjes dicht


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt toch gewoon aan het begin van elke beveiligde pagina controleren of een bepaalde sessievariabele gezet is? Als dat niet het geval is, redirecten naar de loginpagina, in deze pagina zet je dan de sessievariabele.

Het handigst is het om de check in elke beveiligde pagina te includen, en het kan heel eenvoudig:

IF Session("bla") <> "LoggedIn" THEN Response.Redirect ("Login.asp")

Oops! Google Chrome could not find www.rijks%20museum.nl


  • haroldd
  • Registratie: April 2004
  • Laatst online: 22-03 21:11
Frijns.Net schreef op donderdag 14 april 2005 @ 13:39:
Je moet dus voorbij een login komen.
Wat je kunt doen is een status ingelogd ja of nee in je sessie zetten.
En een timestamp in je sessie.
Op elke pagina die je na de login aanroept check je op deze variabele en met de timestamp zou je de sessie een max. tijd kunnen geven zodat je deze na bijv. 10min automatisch laat aflopen. De user moet dan opnieuw inloggen.
maar dit helpt in mijn geval niet. Er is ook nog een onderverdeling zodra je bent ingelogd. Zo kan:
- een gast eigenlijk alleen de homepage bekijken
- iedere ingelogde gebruiker zijn profiel aanpassen
- de beheerder bij het admingedeelte (een "normale ingelogde gebruiker" dus niet!)

nou ziet een normale gebruiker het beheermenu ook niet maar ik wil graag afvangen dat die gebruiker het path naar de beheerpagina's handmatig intypt en zo toegang krijgt.

Werken is gezond, laat het daarom over aan de zieken!


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-05 09:43

Jaspertje

Max & Milo.. lief

Je zou dus aan de sessie moeten kunnen afleiden of een user recht heeft op die pagina, dat kan direct, maar ook indirect, afhankelijk hoe genriek je het opzet. Je zou adv een UserID (sessie) kunnen checken of die user recht heeft op die pagina, dan moet je dat bovenin de pagina doen (db connectie maken enzo dus). Of een GroepID sessie maken en dan bovenaan die pagina de check direct maken.

In beide gevallen moet je alle pagina's in je beheer 'beveiligen'

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 08-05 18:46

Gerco

Professional Newbie

In mijn ASP site hebben alle gebruikers rollen, kun je in mijn beperkte implementatie als groepen zien. Een gebruiker heeft 1 of meer rollen en aan het begin van elke pagina staat een check of de gebruiker de benodigde rol bezit.

Dit is in mijn voorbeeld een statische rol per pagina, maar dat kan natuurlijk net zo goed in de database worden opgenomen, dan geef je gewoon de pagina naam door aan de rol-controle functie in plaats van het rol-id, de functie kan dan in de database kijken welke rollen toegang hebben en aan de hand daarvan beslissen.

Bovenin elke pagina staat dus iets als dit (bij statische rollen):
ASP.NET Visual Basic:
1
<% RequireRole ROLE_NEWS_ADMIN %>

Waarbij de functie RequireRole in een include staat en er ongeveer zo uitziet:
ASP.NET Visual Basic:
1
2
3
4
5
Public Sub RequireRole(ByVal roleid)
  If Not IsUserInRole(roleid) Then
    Response.Redirect "SCNoRights.asp"
  End If
End Sub

[ Voor 3% gewijzigd door Gerco op 14-04-2005 14:11 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • G-RaX
  • Registratie: Mei 2000
  • Laatst online: 05-04 17:44

G-RaX

Unofficial TopCat

Wat je dus gewoon kunt doen. Afgeleid van wat de anderen ook al zeiden:

Je kunt de user laten inloggen, en vervolgens zijn naam, en zijn rol/groep kunnen registreren in de sessie. Je checkt op iedere pagina of de user in de sessie bestaat, zo ja, dan mag er wat gebeuren, zo nee, dan betekent het dat er ongeldige toegang wordt verschaft.

Je kunt dan dus ook direct uitlezen vanuit de sessie welke rol/groep de gebruiker toebehoort, en dit gebruiken om je pagina op de juiste manier op te bouwen.

Heel simpel bouw je dus een checkpagina die je in iedere pagina include.

code:
1
2
3
4
5
6
7
8
9
10
11
<%
'Check of de sessie al bestaat
If Session("userName") = "" Then
  'Zo nee, dan teruggeleiden naar de inlogpagina
  Response.Redirect("login.asp")
Else
 'Vul een aantal variabelen die je wellicht later wil gebruiken in je pagina
 userName = Session("userName")
 userGroup = Session("userGroup")
End if
%>


En in je login pagina moet je dus na een correcte login de variabelen registreren in de sessie.

Die check van Session("userName") = "" Kun je eventueel nog extra beveiligen door deze na de else de username in de login nogmaals te checken met een bestaande naam in de database. Misschien kun je het password ook in de sessie registreren (encoded natuurlijk) en vervolgens in de else een username password check iedere keer uitvoeren op de dbase. Wel veel db transacties, maar ook een behoorlijke security.

[ Voor 21% gewijzigd door G-RaX op 14-04-2005 14:38 ]


  • haroldd
  • Registratie: April 2004
  • Laatst online: 22-03 21:11
heb inderdaad maar een controlefunctie gemaakt waar ik groep aan meegeef die toegang heeft tot die pagina. Werkt goed zo en hoop dat het niet te veel vertraagt.

thnx :)

Werken is gezond, laat het daarom over aan de zieken!

Pagina: 1