我想知道如何防止ASP.NET中的会话固定攻击(参见http://en.wikipedia.org/wiki/Session_fixation)
我的方法通常是每当有人登录时生成并发出新的会话ID。但这种控制级别是否可以在ASP.NET中使用?
答案 0 :(得分:15)
一直在做更多的挖掘。防止任何Web应用程序中的会话固定攻击的最佳方法是在用户登录时发出新的会话标识符。
在ASP.NET Session.Abandon()不足以完成此任务。 Microsoft在http://support.microsoft.com/kb/899918中声明:“”当您放弃会话时,会话ID cookie不会从用户的浏览器中删除。 因此,一旦会话被放弃,对同一应用程序的任何新请求都将使用相同的会话ID,但会有一个新的会话状态实例。“”
请求修复错误有一种解决方法可以确保在http://support.microsoft.com/kb/899918详细生成新的会话ID,这包括调用Session.Abandon然后清除会话ID cookie。
如果ASP.NET不依赖开发人员这样做会更好。
答案 1 :(得分:5)
基本上只需在您的Login
GET
方法和Logout
方法中执行此操作:
Session.Clear();
Session.Abandon();
Session.RemoveAll();
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);
}
答案 2 :(得分:3)
如果我假设正确,你在谈论...... http://en.wikipedia.org/wiki/Session_fixation。简短的回答是肯定的,你有很多方法可以保护你的cookie。您不应该使用无cookie会话,并且在使用会话时,请确保您已明确保护cookie。
希望这会有所帮助......
答案 3 :(得分:-1)
它会在用户登录时生成新的会话ID,并在超时发生时终止会话,或者用户导航/关闭浏览器。你可以通过Abandon()编程杀死它或通过Remove()删除条目。
所以我不确定问题是什么?