【问题标题】:Should I remove a cache entry which I didn't put there?我应该删除我没有放在那里的缓存条目吗?
【发布时间】:2010-09-12 08:36:16
【问题描述】:

前提条件:有一个利用 ASP.NET 安全模型的 Web 应用程序。还有一个 Active Directory (AD) 集成组件。它提供 AD 用户和角色,就好像它们是应用程序自己的用户和角色一样。 AD 用户和 AD 角色之间的“角色中”等关系当然存储在 AD 域中,但由 Web 应用程序缓存。

问题:假设 AD user1 是 AD role1 的成员。当 Web 应用程序启动时,它会缓存此关系。现在,如果 AD 管理员使用 AD 控制台从 role1 中删除 user1,则应用程序不知道此更改 - 缓存条目被保留。这成为一个安全漏洞,因为角色 1 可能拥有用户 1 不应再拥有的权限。

有两种相反的意见如何解决这个问题:

  1. “监听”AD 更改并在 AD 服务器上检测到操作后触发缓存条目删除 - 因为我们负责正确的 AD 组件运行
  2. 保持缓存不变 - 因为我们没有将条目放在那里,也不应该将其删除

在这种情况下,正确的做法是什么?为什么?

谢谢!

【问题讨论】:

    标签: .net asp.net security caching active-directory


    【解决方案1】:

    我认为这应该是使用缓存机制的组件的实现者的责任。

    在许多情况下,更改权限的传播中的一些延迟可能是可以接受的。 因此,使用相当小的绝对超时时间的缓存条目可能是可以接受的。

    如果这样的延迟是不可接受的,那么缓存可能无论如何都不合适。

    缓存机制的实现者应该记录这一点。如果我这样做,我会有一个记录在案的可配置绝对超时,以便管理员可以判断多少延迟是可以接受的,并且可以完全禁用缓存。我还可以提供一个 API 或 UI,让管理员可以手动清除缓存。

    【讨论】:

    • 嗯,我完全忘记了缓存过期...你是对的 - 让管理员可以选择为这种类型的缓存指定超时可能是一个很好的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多