使用会话状态是在asp.net中创建用户登录和角色的一种不安全的方式



考虑将id和密码列表存储在服务器上的数据库中的设置,当用户输入其登录凭据时,后台代码会根据服务器进行验证,并设置值,如Session["id"]Session["login"],以确定用户是否有权访问特定页面。

当用户尝试浏览到某个页面时,该页面会查看会话变量,然后根据需要重新定位用户,并相应地调整页面上的按钮。

这个设置有多安全。

asp.net内置的登录和角色功能似乎太死板了,所以我试图探索其他选项。

使用Session的主要缺陷是,它可能会使您的站点暴露于会话固定漏洞。由于会话是在用户到达您的网站时建立的,因此可能会发现会话ID(例如通过MITM)。

此漏洞的示例步骤如下:

  1. 用户到达HTTP站点,ASP.NET会给他们一个会话,并将会话cookie发送给用户
  2. 攻击者读取会话cookie值
  3. 用户转到登录表单(HTTPS),登录并将您的idlogin值存储在会话中
  4. 攻击者将其会话cookie设置为步骤2中截获的值
  5. 攻击者现在拥有一个有效的已登录会话,劫持现在已登录的用户

仅出于这个原因,我建议使用内置的登录和角色功能,因为在建立经过身份验证的会话之前不会设置身份验证cookie。如果您坚持使用会话方法,我建议您在登录时调用Session.Abandon()来授予用户新的会话,这样他们的会话就与以前未经身份验证的会话不同。

请参阅我对这个问题的回答:https://stackoverflow.com/a/18077422/413180

会话状态是跟踪用户登录的安全方法。假设默认设置(正在进行中,基于cookie的会话),它将与Forms Authentication一样安全。您使用它获得的确切安全级别将取决于您如何配置会话状态。

  1. 无Cookie会话状态——这打开了一些潜在的安全漏洞(例如,用户共享包含会话ID的url,用户截屏包含带有会话ID的网址,等等)

  2. 进程外会话状态--如果您使用远程会话状态服务(或用于存储会话的数据库),会话的安全性将取决于您是否适当地锁定对会话状态服务或数据库的访问。

也就是说,使用Forms Auth获得的内置登录和角色功能并不太难扩展和构建,而不是从头开始。如果你需要自定义,你也可以编写自己的会员资格和角色提供者。如果您需要根据用户名或角色锁定路由,这很有帮助,因为您可以在web.config中执行此操作。

相关内容

  • 没有找到相关文章

最新更新