授权
将每个受影响的访问决策明确化,在实际边界强制执行,并证明允许和拒绝的行为。在请求的流程内工作;加载此技能并不意味着启动全局审计。在引入新框架之前,请使用现有的身份、策略和领域所有者。
定义策略
阅读已接受的产品决策和实际调用者。为更改的流程记录一个小型策略矩阵:主体、操作、资源、适用的关系/范围/状态、允许的输入/输出字段以及结果。根据实际需求使用角色、属性、所有权或能力;角色本身可能不足以确定对特定记录的访问权限。保留有意区分的读取、写入、导出、共享和管理权限。
将身份认证与操作权限分离。从受信任的会话、令牌或服务上下文中获取身份和授权。请求 ID、租户选择器、角色字段和 UI 状态用于选择或描述请求;它们本身不授予权限。匿名/公共访问可以明确允许或限定能力范围。缺失的身份或作用域不得静默地变为全局/系统授权。保持特权操作者和委托身份的明确性和可追溯性。
将未匹配的访问默认为拒绝,并使用满足已接受策略的最小权限。未决定的业务权限是一个产品问题,而不是发明宽松默认值的借口。在该选择仍未解决时继续独立工作。保持一个特意创建的、本地的、非共享的演示环境,与暴露真实受保护数据的服务区分开来。
找出所有受影响的访问路径
遵循受影响的资源通过其实际入口点和所有者。包括相关的 Web/Mobile API、服务器端渲染的加载器、操作、导入、批处理、作业和集成。当搜索/计数/导出、文件、缓存和订阅暴露相同的受保护数据时,请检查它们。阅读 访问面 了解这些路径或关于能力、委托和撤销的内容;选择适用的章节。
明确策略所有者和执行点。集中规则的含义,同时在数据或效果跨越信任边界的任何地方强制执行。单独的中间件登录检查、UI 守卫、UUID 或先前的成功读取不足以满足要求。框架策略、数据库策略或作用域所有者可以生效;请验证其实际配置和运行时凭据,不要假设它涵盖了绕过路径。
强制执行决策
对于读取,在结果离开信任边界之前限制授权的资源集合,并限制返回的字段。对相关对象和替代表示应用等效策略。对缺失资源与禁止资源使用产品的披露策略;错误、计数和序列化属性也可能暴露受保护的事实。
对于变异,验证操作、目标和结果关系,包括用户提供的外键和受保护字段。使用允许的输入字段,而不是将整个请求绑定到持久实体中。当可达到的交叉操作会使权限失效时,在效果处使用存储的适当原子守卫或序列化强制执行作用域、成员身份或状态。耦合的子对象和副作用遵循相同的准入。保留现有完整的所有者;不要仅仅为了插入授权检查而添加另一个业务写入器。
定义授权何时评估以及更改何时生效。当前访问、不可变的历史归因以及先前接受的持久义务是不同的合约。重放、延迟交付和委托作业需要明确的授权/生命周期;过时的用户声明或通用系统身份都不能回答这个问题。根据该合约应用撤销和恢复,而不要静默地取消有效义务或扩大其受众。
证明边界
从策略矩阵派生出一个小型区分性测试集。通过真实所有者和相关的已挂载边界,展示有效主体完成操作以及有意义的拒绝:同一租户中的另一个所有者、另一个租户、较弱的角色、匿名/格式错误的能力或已更改的授权(如果适用)。使用实际目标记录和显式诱饵;断言受保护字段、未更改的持久效果和不相关的记录。选择相关案例,而不是重复每种理论组合。
返回 true 或 false 的模拟策略既不能证明其决策,也不能证明查询/写入限制。使用真实运行时授权测试实际谓词或存储策略。对于 UI 访问声明,独立于按钮可见性验证直接请求。不要探测其他人的身份或共享/实时数据;使用隔离的授权装置。区分静态发现、建议的检查、已执行的测试和部署策略差距。
交付策略、权威来源、受影响的路径、强制执行和证明,以及未解决的产品选择或外部配置。通过的检查仅限于这些路径;该过程不会认证整个应用程序的安全性。