Toon posts:

[asp.net] Sessions wijzigen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben dus bezig met een forum maar nu stop ik een object in een session zodat ik deze object er in een volgende website eruit kan halen like this

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(this.Session["AUTHOR"] == null)
{
    // in de constructor van Authorization word dus de object in een session geplaats
    Auth = new source.Authorization(this);
    if(Auth.Check())
    {
        this.Response.Redirect("allhandling.aspx");
    }
}
else
{
    Auth = (source.Authorization)this.Session["AUTHOR"];
    Auth.WebPage = this;
    if(Auth.Check())
    {
        this.Response.Redirect("allhandling.aspx");
    }
}


Nu is mij vraag is dit wel safe en kan degene die deze page bezoekt de session bekijken en/of wijzigen? Anders word het wel heel makkelijk om jezelf tot admin te bombarderen

Thanks in advance

Johnny

[ Voor 4% gewijzigd door Verwijderd op 07-07-2003 09:50 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Kijk eens naar Role Based Security en Forms Authentication. Je bent nu met heel veel moeite bezig om iets te maken wat al lang in .Net zit.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Kijk hier bijvoorbeeld eens.

[ Voor 29% gewijzigd door whoami op 07-07-2003 12:32 . Reden: ff de juiste link neergezet. :+ ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Thx dat Role Based Security en Forms Authentication werkt idd een stuk makkelijker dan wat ik aan het klote was het kwam wel bijna op hetzelfde neer maar dat is weer wat anders.
hier effe de code hoe ik dat gedaan heb

Java:
1
2
3
4
5
6
7
// OurAuthenticate checked de sql db of er wel een zo'n user bestaat
if(OurAuthenticate())
{
                // Hier word de cookie gezet 
    FormsAuthentication.SetAuthCookie(tbUsername.Text, cbAutoLogin.Checked);
    this.Response.Redirect("default.aspx");
}


Wat ik alleen jammer vind is dat je een cookie kan aanmaken maar dan kan je niet meteen een role zetten :s dus daarom heb ik dat maar op de default.aspx pagina gedaan aangezien je daar toch uitkomt als je login

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void SetRole()
{
    if(this.User.Identity.IsAuthenticated)
    {
        if(!this.Context.User.IsInRole("user"))
        {
            try
            {
                sqlComm = new SqlCommand();
                sqlComm.CommandTimeout = 30;
                sqlComm.CommandType = CommandType.Text;
                sqlComm.CommandText = "SELECT role FROM forum_user WHERE nick_name = '"+ this.User.Identity.Name +"'";
                sqlComm.Connection = sqlConn;

                sqlConn.Open();
                        
                string strRole = (string) sqlComm.ExecuteScalar();
                        
                string[] strArr = strRole.Split(' ');

                System.Web.Security.FormsIdentity id = (FormsIdentity)this.User.Identity;
                this.Context.User = new System.Security.Principal.GenericPrincipal(id, strArr);
            }
            catch (SqlException)
            {
                // TODO: Log if error !
            }
            finally
            {
                sqlConn.Close();
            }
        }
    }
}

beetje uitleg

in de db staat bij de user een role colum waarin staat welke role de gebruiker heeft
vb de gebruiker is een admin dan staat er in de column "user admin"
is degene moderator in forum 5 dan staat er "user mod5"

ps. als iemand weet hoe je tegelijkertijd een cookie kan zetten en daarbij meteen de role dan hoor ik het graag :)

[ Voor 16% gewijzigd door Verwijderd op 08-07-2003 10:48 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Kijk eens hier:
http://www.asp.net/IBS_Po...c&file=Global.asax&rows=2

Ook zou ik de forumrollen omdraaien.. Je geeft nu aan een user een rol hoe hij een forum mag bekijken. Ik zou aan een forum de allowed roles meegeven; dit geeft je iets meer flexibiliteit en geeft je ook de mogelijkheid om 'groepen' te maken.

En voorzover ik zie mix je je BLL en DAL een beetje door elkaar; op zich ook niet zo een fan van. Imho krijg je dan minder onderhoudbare code en neemt je flexibiliteit af.

Ook de rollen zijn imho een beetje vreemd. Je voegt nu meerdere rollen samen in 1 kolom. Ik heb het destijds opgelost door:
[rolesUsers]
RoleID int
UserID int

[Roles]
RoleID
RoleName

[Users]
UserID
UserName
....

[ Voor 92% gewijzigd door gorgi_19 op 08-07-2003 11:01 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Verwijderd schreef op 08 July 2003 @ 10:38:
Thx dat Role Based Security en Forms Authentication werkt idd een stuk makkelijker dan wat ik aan het klote was het kwam wel bijna op hetzelfde neer maar dat is weer wat anders.
hier effe de code hoe ik dat gedaan heb

Java:
1
2
3
4
5
6
7
// OurAuthenticate checked de sql db of er wel een zo'n user bestaat
if(OurAuthenticate())
{
                // Hier word de cookie gezet 
    FormsAuthentication.SetAuthCookie(tbUsername.Text, cbAutoLogin.Checked);
    this.Response.Redirect("default.aspx");
}
Je kan dit ook doen door:
code:
1
FormsAuthentication.RedirectFromLoginPage( ... );

Dit is iets beter. Stel dat een unauthenticated user een bepaalde page request, dan wordt hij geredirect naar de login-page. Als hij daar succesvol inlogged, dan wordt hij opnieuw -automatisch- geredirect naar de oorspronkelijk gerequeste page.
Wat ik alleen jammer vind is dat je een cookie kan aanmaken maar dan kan je niet meteen een role zetten :s dus daarom heb ik dat maar op de default.aspx pagina gedaan aangezien je daar toch uitkomt als je login

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void SetRole()
{
    if(this.User.Identity.IsAuthenticated)
    {
        if(!this.Context.User.IsInRole("user"))
        {
            try
            {
                sqlComm = new SqlCommand();
                sqlComm.CommandTimeout = 30;
                sqlComm.CommandType = CommandType.Text;
                sqlComm.CommandText = "SELECT role FROM forum_user WHERE nick_name = '"+ this.User.Identity.Name +"'";
                sqlComm.Connection = sqlConn;

                sqlConn.Open();
                        
                string strRole = (string) sqlComm.ExecuteScalar();
                        
                string[] strArr = strRole.Split(' ');

                System.Web.Security.FormsIdentity id = (FormsIdentity)this.User.Identity;
                this.Context.User = new System.Security.Principal.GenericPrincipal(id, strArr);
            }
            catch (SqlException)
            {
                // TODO: Log if error !
            }
            finally
            {
                sqlConn.Close();
            }
        }
    }
}

beetje uitleg

in de db staat bij de user een role colum waarin staat welke role de gebruiker heeft
vb de gebruiker is een admin dan staat er in de column "user admin"
is degene moderator in forum 5 dan staat er "user mod5"

ps. als iemand weet hoe je tegelijkertijd een cookie kan zetten en daarbij meteen de role dan hoor ik het graag :)
Levert dat geen problemen op bij volgende requests? Aangezien webapplicaties stateless zijn, worden die roles toch 'vergeten' na die request?
Ik los dat op door de code in de authenticate_request te plaatsen.
[rml]whoami in "[ ASP.NET] Webdev tips"[/rml]

[ Voor 3% gewijzigd door whoami op 08-07-2003 11:08 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Bedankt voor de tips ik heb weer wat te sleutelen :)
Pagina: 1