将用户名保存到会话属性中以帮助保护站点
本文关键字:帮助 保护 站点 属性 会话 用户 保存 | 更新日期: 2023-09-27 17:55:55
Edit 有些人表示不喜欢我在这个问题中提出的特定解决方案,但请不要浪费我的时间建议完全替代的方法。我无法控制我正在做的事情的要求。如果您不同意并且没有答案,请继续前进。谢谢。
对于初学者来说,这是一个实践项目,不会被公众使用。我需要使用用户名的会话属性保护我网站中的某些页面。当输入正确的用户名和密码组合时,会发生这种情况(保存到会话中的用户名)。我的老板审查了我的实现,并说"将用户名值直接存储到 HttpSessionState 中是错误的,您应该设置会话的用户名属性,并将会话对象存储到 HttpSessionState 中"。现在我想我明白他指的是我的代码的哪些部分,但是更改此设置会破坏安全性(一旦单个用户登录,任何人都可以使用指向页面的直接链接)。
确保阅读代码中的注释,我添加了它们来描述有问题的行。
在安全性方面起作用,但用户名直接存储在HttpSessionState中:
//login.ascx.cs
private void Login_Click(object sender, EventArgs e)
{
if (sender == null || e == null)
{
throw new ArgumentNullException("Null Exception: Login_Click");
}
User user = new User();
user.Login(_username.Text, _password.Text);
if (user.IsValid() && user.GetIsUser() != false)
{
user.Save();
//the line below is what I used to make the secure pages work properly.
//but based on what my boss says, I think this is what should be changed.
Session["Username"] = _username.Text;
//What i tried instead was to set 'MySession.Current.Username = _username.Text;'
//which allowed successful login, but the pages became insecure once again.
Response.Redirect("Secure/Default.aspx");
}
else
{
DisplayErrors(user._validationErrors);
}
_errors.Text = errorMessage;
}
和我的会话.cs
public string Username
{
get
{
if (HttpContext.Current.Session["Username"] == null)
{
return string.Empty;
}
else
{
return HttpContext.Current.Session["Username"].ToString();
}
}
set
{
//when the line below is uncommented, the secure pages are vulnerable
//but if I comment it out, they work properly.
//HttpContext.Current.Session["Username"] = value;
}
}
那么,如何在维护安全站点的同时Set the username property of the session, and store the session object into the HttpSessionState
呢?
编辑:@Win,在安全/默认内.aspx.cs
private void Page_load(object sender, System.EventArgs e)
{
...
if((string)Session["Username"] != _labelusername.Text)
{
Response.Redirect(redirectLogin); //to login page
}
else {} //success
}
你应该研究FormsAuthentication
.网上有很多这样的例子:
http://bradkingsley.com/securing-asp-net-pages-forms-authentication-c-and-net-4/