Permissions 网站权限:更改用户';当他们';重新登录

Permissions 网站权限:更改用户';当他们';重新登录,permissions,security,Permissions,Security,我可能错了,但我的理解是,这样处理权限是一种非常常见的做法: 用户进入登录页面并提供用户名和密码 验证用户名和密码。如果有效,则将用户信息(包括权限)设置为会话变量 当登录用户导航站点时,用户可以根据其权限使用某些功能,这些权限在会话中引用 这是有意义的,因为经常查询数据库以获取用户权限是不切实际的。然而,从安全的角度来看,我不确定最好的方法是什么。一个简单的例子是,当用户登录时,您要从他们那里删除某个权限。一个极端的例子是,如果您在用户登录时将其标记为非活动。除了将数据库权限检查(与会话权限检

我可能错了,但我的理解是,这样处理权限是一种非常常见的做法:

  • 用户进入登录页面并提供用户名和密码

  • 验证用户名和密码。如果有效,则将用户信息(包括权限)设置为会话变量

  • 当登录用户导航站点时,用户可以根据其权限使用某些功能,这些权限在会话中引用

  • 这是有意义的,因为经常查询数据库以获取用户权限是不切实际的。然而,从安全的角度来看,我不确定最好的方法是什么。一个简单的例子是,当用户登录时,您要从他们那里删除某个权限。一个极端的例子是,如果您在用户登录时将其标记为非活动。除了将数据库权限检查(与会话权限检查相反)编码到网站的每个部分之外,我不知道如何让该用户的web浏览器了解更改。同样,这似乎有些过分,但如果你想要一个安全的网站,这真的是唯一的方法吗


    谢谢

    我相信你说得对:

    除了将数据库权限检查(与会话权限检查相反)编码到网站的每个部分之外,我不知道如何让该用户的web浏览器了解更改

    根据站点的设计方式,当您对用户的权限进行足够剧烈的修改时,使用户的会话无效可能是有意义的。删除会话意味着用户将面临新的登录请求,但如果您刚刚禁用了他们的帐户或严重降低了他们的权限,这可能是可以接受的

    但是,您不希望因为每一件小事而使会话无效,当然也不希望因为几乎任何权限增强操作而使会话无效


    如果所有会话在上次身份验证后N秒过期,则可以对应用程序代码授予实际已撤销的权限的时间设置上限。不管怎样,当赌注不是很高时,这可能是合适的。

    我相信你说得对:

    除了将数据库权限检查(与会话权限检查相反)编码到网站的每个部分之外,我不知道如何让该用户的web浏览器了解更改

    根据站点的设计方式,当您对用户的权限进行足够剧烈的修改时,使用户的会话无效可能是有意义的。删除会话意味着用户将面临新的登录请求,但如果您刚刚禁用了他们的帐户或严重降低了他们的权限,这可能是可以接受的

    但是,您不希望因为每一件小事而使会话无效,当然也不希望因为几乎任何权限增强操作而使会话无效


    如果所有会话在上次身份验证后N秒过期,则可以对应用程序代码授予实际已撤销的权限的时间设置上限。这可能适用于风险不是很高的情况。

    当任何用户权限更改(或至少重新生成会话ID)时,您应该始终使会话无效并启动一个新会话,重新生成会话并不意味着用户必须再次提供其凭据-只是透明地为用户提供新的cookie。我喜欢在用户不再次提供凭据的情况下重新生成会话的想法。你们有没有这方面的代码示例(最好是PHP)?我很感激@Cheekysoft:我喜欢在幕后处理工作而不要求用户再次进行身份验证的声音——但我有点担心提供一种机制,可以在不执行身份验证步骤的情况下进行会话——它一定非常健壮。@sarnold你怎么看?:@Nick:这是一个非常聪明的编程尽管在生产应用程序中我不推荐任何东西。:)当任何用户权限发生更改(或至少重新生成会话ID)时,应始终使会话无效并启动新会话,重新生成会话并不意味着用户必须再次提供其凭据-只是透明地为用户提供新的cookie。我喜欢在用户不再次提供凭据的情况下重新生成会话的想法。你们有没有这方面的代码示例(最好是PHP)?我很感激@Cheekysoft:我喜欢在幕后处理工作而不要求用户再次进行身份验证的声音——但我有点担心提供一种机制,可以在不执行身份验证步骤的情况下进行会话——它一定非常健壮。@sarnold你怎么看?:@Nick:这是一个非常聪明的编程尽管在生产应用程序中我不推荐任何东西。:)