Geo*_* Z. 7 c# asp.net sessionid session-fixation
我正在尝试在相当大的ASP.NET Web应用程序(C#)上处理许多安全问题.为了防止会话固定攻击,我想在每次用户验证自己时生成一个新的会话ID.但是我想只生成一个新的会话ID而不会丢失会话的其余部分.在对这个主题做了一些研究后,我找到了几个有效的解决方案:
解决方案1:在ASP.NET中生成新的SessionId
这建议通过将会话cookie设置为空字符串来手动清除会话cookie.但是,这需要页面刷新或使用AJAX来确保cookie确实被删除,这在我的特定情况下不是真正可行的选项.
解决方案2:在当前HTTPContext中生成新的ASP.NET会话
我已经实现了这种方法,并且它按预期工作.然而,正如原始海报所述,这并不是你所谓的优雅解决方案.此外,这篇文章还有几年历史,我希望现在可能有更好的解决方案.
我想知道的是,如果有任何替代方法可以做到这一点,我在研究中错过了,或者在没有操作会话管理内部的情况下可以使用解决方案2.
由于 ASP.NET 中会话管理的设计方式,解决方案 2 的工作方式决定了实现您想要的目标并不容易。考虑到 ASP.NET 会话状态实现细节在某些时候会发生变化,解决方案 (2) 似乎有点冒险。
我建议使用解决方案 1 的变体,在用户进行身份验证时将会话中的相关数据存储到数据库/缓存中,为用户获取一个新会话,然后用所需的数据填充该会话。由于数据正在从“未经身份验证”的会话转移到“经过身份验证的”会话,因此您还应该注意验证该数据。
手动清除会话 cookie 可能会导致滑坡,重新提高 ASP.NET 会话安全性。您将在NWebsec.SessionSecurity的经过身份验证的会话标识符中找到更强大的解决方案(免责声明:我是该项目的开发人员)。
| 归档时间: |
|
| 查看次数: |
14785 次 |
| 最近记录: |