security

A security checklist for protecting applications from common problems such as exposed secrets, unsafe input, and weak access controls.

In plain words
What is it for?
Use it when reviewing authentication, APIs, user input, secret management, data protection, rate limiting, and error handling.
Why use it?
It helps catch issues such as hardcoded passwords, SQL injection, cross-site scripting, and data leaks before code is committed.

Cursor rule for Cursor

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add rules/jy315189/everything-cursor/security
Clone the repo
git clone --depth 1 https://github.com/jy315189/everything-cursor

Made for: Cursor.

Per session 699 This file is loaded in full into every session.
When invoked 699 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00699 $0.00699
Opus 5 $0.00349 $0.00349
Sonnet 5 $0.00140 $0.00140
Haiku 4.5 $0.00070 $0.00070

Measured yesterday against content hash 4a2be9d8243e, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

security scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.cursor/rules/security.mdc · 116 lines

How it starts

The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Security Guidelines

Mandatory Security Checks

Before ANY commit:

  • No hardcoded secrets (API keys, passwords, tokens)
  • All user inputs validated
  • SQL injection prevention (parameterized queries)
  • XSS prevention (sanitized HTML)
  • CSRF protection enabled
  • Authentication/authorization verified
  • Rate limiting on all endpoints
  • Error messages don't leak sensitive data

Secret Management

// NEVER: Hardcoded secrets
const apiKey = "sk-proj-xxxxx"

// ALWAYS: Environment variables
const apiKey = process.env.OPENAI_API_KEY

if (!apiKey) {
  throw new Error('OPENAI_API_KEY not configured')
}

Security Checklist by Category

Authentication & Authorization

  • Use secure session management
  • Implement proper logout functionality
  • Use HTTPS everywhere
  • Implement account lockout after failed attempts
  • Use bcrypt/argon2 for password hashing (not MD5/SHA1)

Data Protection

  • Encrypt sensitive data at rest
  • Use secure transmission (TLS 1.3)
  • Implement proper access controls
  • Sanitize all user inputs

API Security

  • Use API keys or OAuth 2.0
  • Implement rate limiting
  • Validate all request parameters
  • Use parameterized queries for database access

Input Validation

import { z } from 'zod'

const UserSchema = z.object({
  email: z.string().email(),
  name: z.string().min(1).max(100),
  age: z.number().int().min(0).max(150)
})

// Validate before processing
const validated = UserSchema.parse(req.body)

SQL Injection Prevention

// WRONG: SQL Injection vulnerable
const query = `SELECT * FROM users WHERE id = ${userId}`

// CORRECT: Parameterized query
const query = 'SELECT * FROM users WHERE id = $1'
await db.query(query, [userId])

// CORRECT: Using ORM
await prisma.user.findUnique({ where: { id: userId } })

XSS Prevention

// WRONG: XSS vulnerable
<div dangerouslySetInnerHTML={{ __html: userComment }} />

// CORRECT: Use sanitization library if HTML needed
import DOMPurify from 'dompurify'
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userComment) }} />

// BEST: Avoid HTML, use plain text
<div>{userComment}</div>

Read the full file on GitHub · 116 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 116 lines · 699 tokens per session scan A 4a2be9d8243e

Subscribe to this mod's changes

security is a cursor rule published in the GitHub repository jy315189/everything-cursor (2 stars, last pushed 6mo ago), licensed MIT. It adds 699 tokens to every session, about $0.0035 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.