知行札记
专题技术实践服务应用

Web 服务的身份、授权与输入边界

接好会话和对象授权,处理 Cookie、CSRF、跨源、注入、SSRF、限流与秘密。

会话建立了哪份主体事实

会话库管理登录和多次请求的身份关系。Better Auth 等库提供相应接口,使用前核对实际存储、Cookie、适配器、令牌期限与撤销条件。客户端显示用户信息是本地观察,执行端必须重新取得可信主体。

会话 Cookie 的 HttpOnly 限制脚本读取,Secure 限制特定安全传输条件,SameSite 影响跨站发送。它们各有范围,不能承诺消除全部 XSS 或 CSRF。OAuth 提供授权委托,OIDC 增加身份相关语义,接入提供方时按真实流程核对重定向、状态与 PKCE 等条件。

JWT 验证需要按用途核对签发方、受众、有效期和算法及密钥。签名证明完整性与来源,不加密载荷;短期令牌与撤销政策各自维护。应用的角色、租户和对象所有权不能仅由未经核实的外部字段决定。

每个效果入口怎样授权

查询或更新应关联主体、操作、对象和当前条件,例如数据库条件同时包含 id 与 ownerId。列表、导出、搜索、文件、实时订阅和后台任务都可能成为旁路,需要同一语义的范围控制。

后台任务说明使用提交时已确认的意图,还是执行时重查权限。权限变化和实际写入之间的竞态需要事务、版本或其他适当协调。复杂策略库如 CASL 可组织判断,仍需把规则连接到真实查询与效果。OWASP Authorization

数据进入哪个解释器

结构校验先控制字段、长度、数量和取值。SQL 值参数化,动态列名经枚举映射;文件路径使用服务器生成身份和受限目录;系统命令使用可控参数接口;日志处理控制字符和公开范围。不同解释器需要对应保护。

React 文本转义没有覆盖所有 HTML、URL、样式、第三方组件和脚本入口。富文本 JSON 树中的链接、图片、扩展属性或输出 HTML 仍可能携带危险内容;schema 合法不能推出注入免疫。必要净化和协议允许范围在实际呈现边界执行。OWASP XSS Prevention

CORS 控制浏览器读取跨源响应的条件,凭据模式还受 origin 和 Cookie 政策影响。以 Cookie 提交效果时建立 CSRF 防护;允许 origin 必须按解析后的完整 origin 与声明集合比较,字符串前缀匹配会接受 https://trusted.example.attacker.invalid 一类目标。

完整 origin 比较可以用于浏览器跳转或邮件链接校验。此例允许一个 HTTPS origin 的一个路径,拒绝 URL 内凭据,返回标准化 URL;它没有进行服务器端抓取,也不承担 DNS 或网络出口安全:

const allowedOrigins = new Set(['https://accounts.example.invalid']);
export function parseConfirmationUrl(raw: string) {
  const url = new URL(raw);
  if (url.protocol !== 'https:' || url.username || url.password) {
    throw new Error('Unsupported confirmation URL');
  }
  if (!allowedOrigins.has(url.origin) || url.pathname !== '/confirm') {
    throw new Error('Untrusted confirmation target');
  }
  url.hash = '';
  return url;
}

查询参数还需按认证协议核对允许键与令牌结构。https://accounts.example.invalid.attacker.invalid/confirm 的 origin 不在集合内;https://accounts.example.invalid:444/confirm 也不相等。开放多个目标时维护显式集合,不用字符串包含或前缀来替代域名规则。

服务端取得外部 URL

先解析 URL,再检查协议、主机、端口、凭据和允许路径。DNS 解析、重定向、IPv4/IPv6、代理及网络出口会影响最终连接。单纯 startsWith 或一次 DNS 检查不能保证以后连接仍在允许范围,平台网络限制与重新核对需组合使用。OWASP SSRF Prevention

资源与密码

限流按主体、客户端和操作目的选择键,代理地址信任需明确。多个实例各自内存计数不会自动形成全局配额,外部共享存储需考虑故障政策。输入数量、文件尺寸、查询复杂度和外部调用预算也要受控。

密码用适当密码哈希及参数,随机凭据用密码学随机源。既有会话库的密码路径由库管理,额外自建路径需要独立核查。密钥轮换还需说明有效窗口、旧记录和恢复;秘密不进入公开变量、URL、错误和日志。

安全头、CSP、依赖审计和沙箱提供不同保护。是否满足实际安全目标仍需按威胁和真实入口检查;本文未开展全面安全审计或真实攻击试验。

最后更新于

本页目录