为什么ASP.NET接受外部创建的会话标识符?

时间:2009-08-24 16:17:37

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

我有一个使用标准SQL成员资格提供程序的ASP.NET 3.5网站。

在我们推向生产之前,应用程序必须通过IBM Rational AppScan。

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

我该怎么做才能解决这个问题?

我正在使用SQL Membership Provider。这有关系吗?我也在使用标准登录控件。我关掉了“记住我”,然后隐藏了。

感谢。

3 个答案:

答案 0 :(得分:8)

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

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

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

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

似乎RegenerateExpiredSessionId属性正在控制它。 将其设置为true。同时保持超时和低值,用户可接受的最小值(例如10-15分钟)。