← ClaudeAtlas

meteor-securitylisted

Use when auditing or hardening a Meteor 3 application. Triggers on missing check() on method arguments, missing this.userId guards on publications, browser-policy CSP, DDPRateLimiter rules, oauth-encryption via Accounts.config oauthSecretKey, audit-argument-checks, allow/deny legacy patterns, BrowserPolicy.content.disallowInlineScripts, BrowserPolicy.framing.disallow. Use this skill when the user asks about hardening, asks about a security review, or asks about CSP for a third-party script (Stripe, Google Maps, fonts).
meteor/agent-skills · ★ 7 · AI & Automation · score 74
Install: claude install-skill meteor/agent-skills
# Meteor security Meteor's security model is opinionated: the server holds authority, the client cannot be trusted, and the only places that filter data before it reaches users are methods (write paths) and publications (read paths). ## Decision flow 1. Audit every method: does it `check()` every argument and guard on `this.userId` or `Meteor.userId()` when authentication matters? 2. Audit every publication: does it filter by `this.userId` (when user-specific) and project columns with `fields`? 3. Add `audit-argument-checks` in dev to catch missing `check()`. 4. Add `browser-policy` and configure CSP. 5. Add `DDPRateLimiter` rules for sensitive methods (login, password reset, resource creation). 6. If the app uses OAuth, set `oauthSecretKey` to encrypt provider secrets at rest. 7. Remove `allow` / `deny` rules. They are legacy and easy to misuse; use methods instead. ## Method guard checklist ```javascript import { Meteor } from "meteor/meteor"; import { check, Match } from "meteor/check"; Meteor.methods({ async updateProfile(payload) { check(payload, { displayName: String, bio: Match.Optional(String) }); if (!this.userId) { throw new Meteor.Error("not-authorized"); } await Meteor.users.updateAsync(this.userId, { $set: { profile: payload } }); }, async updateAddress(payload) { check(payload, String); if (!Meteor.userId()) { throw new Meteor.Error("not-authorized"); } await Meteor.users.updateAsync(Meteor.u