Meteor Security 是一个用于审计和加固 Meteor 3 应用的安全技能。Meteor 的安全模型是明确的:服务器掌握权威,客户端不可信,数据在到达用户之前只有两个过滤点——方法(写入路径)和发布(读取路径)。该技能围绕这一模型给出决策流程、检查清单和配置示例。
用途 该技能用于在审计或加固 Meteor 3 应用时,系统性地检查方法参数校验、用户身份守卫、发布数据过滤、内容安全策略、速率限制和 OAuth 密钥加密等安全要点。
主要能力
- 方法审计:检查每个方法是否对每个参数执行 check(),在需要认证时是否用 this.userId 或 Meteor.userId() 做守卫。
- 发布审计:检查每个发布是否按 this.userId 过滤(针对用户特定数据),并用 fields 投影列。
- 开发期校验:添加 audit-argument-checks 以捕获缺失的 check()。
- CSP 配置:添加 browser-policy 并配置内容安全策略。
- 速率限制:为敏感方法(登录、密码重置、资源创建)添加 DDPRateLimiter 规则。
- OAuth 密钥加密:若应用使用 OAuth,设置 oauthSecretKey 以加密静态存储的提供方密钥。
- 替换宽松的客户端写入规则为经过认证的方法,并在等效的仅方法策略生效前保留保护性 deny 规则。
使用方式 方法守卫检查清单要求:对每个参数执行 check,必要时做 userId 门禁,失败时抛出 Meteor.Error(code, reason),服务器端使用 *Async Mongo 操作。发布守卫检查清单要求:拒绝返回无界游标、省略字段投影或跳过 userId 过滤的发布。CSP 通过 browser-policy 配置,BrowserPolicy 仅限服务器端,应在模块初始化或启动时配置,使每个请求收到一个确定性的进程级策略。DDPRateLimiter 用于敏感方法,只有匹配器字段参与限流桶键;没有 clientAddress、connectionId 或 userId 时,所有匹配调用者共享一个全局桶。Meteor 3.5+ 允许异步匹配器函数,但查询需保持快速;Meteor 3.0 至 3.4 匹配器必须保持同步。OAuth 密钥加密需添加 oauth-encryption 并向 Accounts.config 传入 16 字节 base64 密钥(不是 32 字节),且必须在模块顶层而非 Meteor.startup 内调用。audit-argument-checks 会在任何方法或发布运行时未用 check() 覆盖所有参数时抛出错误;合法接受任意输入的方法需显式声明 check(args, [Match.Any])。
适用场景 适用于审计或加固 Meteor 3 应用,尤其是需要检查方法参数校验、发布数据过滤、CSP、速率限制和 OAuth 密钥加密的场景。
限制 资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。部分行为依赖具体 Meteor 版本(如 Meteor 3.5+、3.6-beta.1、accounts-base@3.4.0-beta360.1 等),旧版本应用需检查包版本。HttpOnly 存储不能阻止活跃的同源 XSS 获取用于 DDP 认证的 resume token。