首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话劫持与会话固定

会话劫持与会话固定
EN

Stack Overflow用户
提问于 2012-05-22 19:53:23
回答 1查看 3.5K关注 0票数 0

我们的asp.net应用程序存在会话劫持和会话固定问题。我们还实现了SSL。

1..我在web.config文件中添加了下面的代码。

<

代码语言:javascript
复制
<httpCookies httpOnlyCookies="true" requireSSL="true"   />


  <forms loginUrl="Homepage.aspx"
      protection="All"
      timeout="20"
      name=".ASPXAUTH"
      path="/"
      requireSSL="true" 
      slidingExpiration="true"
      />

->

2...加密formsathuntication票据,并在用户被加密后添加到cookie中。

<

FormsAuthenticationTicket tkt;

串炊具;

HttpCookie ck;

tkt =新的FormsAuthenticationTicket(1,uname,DateTime.Now,DateTime.Now.AddMinutes(20),false,“您的自定义数据”);

FormsAuthentication.Encrypt(tkt);

新HttpCookie(FormsAuthentication.FormsCookieName,炊具);ck.Path = FormsAuthentication.FormsCookiePath;

Response.Cookies.Add(ck);

-->

3..我正在删除会话变量,并在注销页和错误页上将空值传递给ASP.NET_SessionID。

SessionHandler.EndSession();

代码语言:javascript
复制
    Session.RemoveAll();

    Session.Abandon();

    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));


    if (Request.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
        Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);
    }

    if (Request.Cookies["AuthToken"] != null)
    {
        Response.Cookies["AuthToken"].Value = string.Empty;
        Response.Cookies["AuthToken"].Expires = DateTime.Now.AddMonths(-20);
    }

    HttpCookie authcookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    authcookie.Expires = DateTime.Now.AddDays(-1D);
    Response.Cookies.Add(authcookie);
    FormsAuthentication.SignOut();

问题还没有解决..。

EN

回答 1

Stack Overflow用户

发布于 2012-05-22 21:37:05

  1. 是您的问题会话劫持,还是身份验证劫持?
  2. 您是否信任会话值而不验证身份?(请注意,会话和身份验证在ASP.NET中并没有本质上的链接)。如果您已经实现了SSL,为什么您的会话cookie仍然设置为requireSSL="false"
  3. Research最佳实践,并亲自查看错误所在。例如- http://www.troyhunt.com/2010/07/owasp-top-10-for-net-developers-part-3.html

详细说明第2点。

这里有两个cookie在使用,一个用于Session,另一个用于FormsAuthentication。FormsAuth cookie标识用户,需要采取所有合理的步骤来保证这个用户的安全。通常,需要SSL是一个很好的步骤(正如您在编辑示例中所应用的那样)。但是,对于开发人员来说,会话cookie通常不会受到严格的检查,但取决于您使用它的方式,它可能也同样敏感。会话固定会窃取会话,而不是身份验证。

举个例子:

  1. UserA登录,他们是管理用户。他们收到一个表示“这是cleared).
  2. UserB”的FormsAuth cookie,他们还可能得到一个会话cookie,说明“这个用户是UserA获得了属于UserA的会话cookie的一个副本”(他们可以通过截取来实现这一点,甚至可以在UserA注销后在同一台机器上完成,如果会话cookie不是cleared).
  3. UserB登录,那么他们就是“只读的”用户(而不是管理员)。他们收到一个FormsAuth cookie,上面写着“这是UserB",然后注入在第2步被盗的会话cookie,这意味着他们有一个FormsAuth cookie,声明"This is UserB",还有一个Session cookie,说明”这个用户是UserB,现在是管理员。“

这里的问题(因为它涉及到我最初关注的列表中的第2点)是,服务器没有验证与其会话相关的用户的身份。您可以尽最大努力将会话链接起来,并以某种方式形成身份验证票,并确定您正在加密(SSL)。或者,您可以停止在会话中存储敏感数据(或至少减少它)。当提到上面的“这个用户是管理员”的例子时,更好的实现是将ASP.NET角色和配置文件提供程序与成员资格提供程序结合使用。他们三人并驾齐驱,有很多例子说明如何利用它们来发挥你的优势。

这只是一项可能的调查,正如@JohnFx正确地指出的那样,在你期待一个好的答案之前,你真的需要一个集中的问题。当涉及到安全实现时,重要的是要理解所涉及的概念,而不仅仅是抛出示例代码。到目前为止,您提供的示例代码看起来与讨论会话固定的CodeProject文章相似得令人怀疑,但您是否理解它试图实现的目标呢?你知道它是否适用于你正在经历的问题吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10709176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档