【问题标题】:Why is ASP.NET accepting externally created session identifiers?为什么 ASP.NET 接受外部创建的会话标识符?
【发布时间】:2009-08-24 16:17:36
【问题描述】:

我有一个使用标准 SQL Membership Provider 的 ASP.NET 3.5 网站。

应用程序必须先通过 IBM Rational AppScan,然后我们才能推送到生产环境。

我收到错误消息:
严重性:高
测试类型:应用
漏洞网址:http://mytestserver/myapp/login.aspx
补救任务:不接受外部创建的会话标识符

我能做些什么来解决这个问题?

我正在使用 SQL 成员资格提供程序。这有关系吗?我也在使用标准的登录控件。我已关闭并隐藏了“记住我”。

谢谢。

【问题讨论】:

  • 我想不出任何理由为什么这本来就是不好的?不会改变他们检查它的事实,但我想知道为什么

标签: asp.net security asp.net-membership membership


【解决方案1】:

这不是一个漏洞(我真的不喜欢 AppScan,因为它的误报 - 我不得不解释 CSRF cookie 不需要链接到我的小型开源项目的会话的次数是变得烦人)。

在这种情况下将发生的所有事情都是第一次以创建的会话标识符将任何内容存储在会话状态中,一个新的会话将在服务器上打开,其中没有任何内容。如果您担心会话固定,那么您可以在身份验证后清除 cookie。

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

但是对于表单身份验证,身份验证详细信息不会保留在会话中,因此固定根本不是问题。

坦率地说,如果您必须通过安全扫描,而没有任何人评估结果是否为误报,那么这是一个完全不同的问题。

【讨论】:

  • 谢谢。但是,我尝试了这个,但 IBM Rational AppScan 报告了同样的安全错误。
  • 这不是一个漏洞,你的解释是错误的。您写的答案不正确。
  • 我同意你的观点,但光说是不够的。我也不喜欢 AppScan 工具,但这就是我生活的世界。我在每个项目上浪费了一天左右的时间。在他们改变政策之前,我必须忍受它。
  • 哇,很奇怪 :) 但很高兴它通过了。
  • 问题:我应该把这两行放在哪里?在Session_EndGlobal.asax?
【解决方案2】:

您可能需要将默认 cookie 设置更改为您的应用程序独有的

尝试设置唯一的 cookie 路径:

<forms name="YourAppName"
       path="/FormsAuth" ... />

http://msdn.microsoft.com/en-us/library/ms998310.aspx#paght000012_additionalconsiderations

更多阅读... http://msdn.microsoft.com/en-us/library/ms998258.aspx

【讨论】:

    【解决方案3】:

    似乎RegenerateExpiredSessionId 属性正在控制它。 务必将其设置为 true。还要将超时保持在一个较低的值,这是用户可接受的最紧凑的值(例如 10 - 15 分钟)。

    【讨论】:

    • 谢谢。我试过这个,但 IBM Rational AppScan 每隔几秒就会访问该站点。将该值降低到 10 分钟也无济于事。
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 2016-01-22
    • 2019-07-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多