DEV Community

Ofri Peretz profile picture

Ofri Peretz

IC5/M2 Leader @ Snappy US. Building revenue APIs & AI-ready ESLint plugins. Expert in distributed teams, scalable infra, and fostering a culture of craftsmanship.

Education

CS

Work

Engineering Manager @ Snappy | Open Source Developer | ESLint for AI tools

Your MongoDB Login Can Be Bypassed With No Password and No Quotes. The ESLint Plugin That Catches It.

Your MongoDB Login Can Be Bypassed With No Password and No Quotes. The ESLint Plugin That Catches It.

1
Comments
6 min read

Want to connect with Ofri Peretz?

Create an account to connect with Ofri Peretz. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
Three SQL Injection Patterns That Still Ship in Node.js — And the ESLint Rule That Catches Them

Three SQL Injection Patterns That Still Ship in Node.js — And the ESLint Rule That Catches Them

Comments
7 min read
Claude vs Gemini Across 4 Security Domains: A Dead Heat — and the Hardening 63% of AI Code Skips

Claude vs Gemini Across 4 Security Domains: A Dead Heat — and the Hardening 63% of AI Code Skips

6
Comments 7
8 min read
The Bug That Passes Every Toolchain Check: Circular Dependencies in JavaScript

Bundler trade-offs and hidden CI slowdowns

The Bug That Passes Every Toolchain Check: Circular Dependencies in JavaScript

2
Comments 4
7 min read
Payload CMS Has 508 Circular Dependencies. Next.js Has 17. Here's Why They Form in Every Large JS Codebase.

Payload CMS Has 508 Circular Dependencies. Next.js Has 17. Here's Why They Form in Every Large JS Codebase.

Comments
12 min read
Math.random() Is Not Secure. I Found It Generating API Keys in a 44K-Star Repo.

Math.random() Is Not Secure. I Found It Generating API Keys in a 44K-Star Repo.

4
Comments 2
5 min read
Same NestJS Prompt. Claude Got 6 Security Errors. Gemini Got 2. Here's What Both Got Wrong.

Same NestJS Prompt. Claude Got 6 Security Errors. Gemini Got 2. Here's What Both Got Wrong.

2
Comments
10 min read
5 Cycles Invisible in 14,556 Files. The Cache Bug That Hid Them.

5 Cycles Invisible in 14,556 Files. The Cache Bug That Hid Them.

1
Comments
10 min read
Our no-cycle Rule Reported 0 Cycles on Next.js. oxlint Found 17. Here's the Bug.

Our no-cycle Rule Reported 0 Cycles on Next.js. oxlint Found 17. Here's the Bug.

1
Comments
12 min read
Claude Wrote a NestJS Service. TypeScript Was Happy. ESLint Found 6 Security Holes.

Claude Wrote a NestJS Service. TypeScript Was Happy. ESLint Found 6 Security Holes.

5
Comments 7
12 min read
I Inherited a NestJS Codebase. 12 Seconds of ESLint Found 47 Violations Across 6 Vulnerability Classes.

I Inherited a NestJS Codebase. 12 Seconds of ESLint Found 47 Violations Across 6 Vulnerability Classes.

1
Comments 2
8 min read
The #1 ESLint Security Plugin Has 1.5M Downloads and Caught 0 of My 40 Vulnerabilities

The #1 ESLint Security Plugin Has 1.5M Downloads and Caught 0 of My 40 Vulnerabilities

Comments
12 min read
Our cycle detector reported 0. The real number was 245 files.

Our cycle detector reported 0. The real number was 245 files.

Comments
8 min read
Aggregate Benchmarks Lie. Here's What 700 AI Functions Look Like by Security Domain.

Aggregate Benchmarks Lie. Here's What 700 AI Functions Look Like by Security Domain.

Comments
15 min read
A 5KB corpus that runs in 3 seconds found 3 bugs months of unit tests missed

A 5KB corpus that runs in 3 seconds found 3 bugs months of unit tests missed

Comments
10 min read
We Ranked 5 AI Models by Security. The Leaderboard Is Wrong.

We Ranked 5 AI Models by Security. The Leaderboard Is Wrong.

2
Comments
9 min read
The AI Hydra Problem: Fix One AI Bug, Get Two More

The AI Hydra Problem: Fix One AI Bug, Get Two More

Comments
12 min read
Microsoft's SDL ESLint Plugin Caught 3 Node Vulns. The Domain Plugins Caught 46 — Same File, Wrong Layer

Microsoft's SDL ESLint Plugin Caught 3 Node Vulns. The Domain Plugins Caught 46 — Same File, Wrong Layer

1
Comments
9 min read
SonarJS Has 269 Rules. On 40 Vulnerabilities It Caught 14 — It Misses 65% of the Security Surface.

SonarJS Has 269 Rules. On 40 Vulnerabilities It Caught 14 — It Misses 65% of the Security Surface.

Comments
9 min read
Same File: eslint-plugin-security Caught 21, the Domain Plugins Caught 46. It's a Floor, Not a Ceiling.

Same File: eslint-plugin-security Caught 21, the Domain Plugins Caught 46. It's a Floor, Not a Ceiling.

Comments
8 min read
I Let Claude Write 80 Functions. 65-75% Had Security Vulnerabilities.

I Let Claude Write 80 Functions. 65-75% Had Security Vulnerabilities.

4
Comments 4
14 min read
PostgreSQL's COPY FROM Can Read /etc/passwd Into Your Database. One ESLint Rule Blocks It.

PostgreSQL's COPY FROM Can Read /etc/passwd Into Your Database. One ESLint Rule Blocks It.

Comments
7 min read
One INSERT Loop Made Our CSV Import 500x Slower. One ESLint Rule Catches It Before It Ships.

One INSERT Loop Made Our CSV Import 500x Slower. One ESLint Rule Catches It Before It Ships.

1
Comments 3
7 min read
search_path Hijacking: the PostgreSQL Attack That Turns SELECT * FROM users Into the Attacker's Table

search_path Hijacking: the PostgreSQL Attack That Turns SELECT * FROM users Into the Attacker's Table

Comments
7 min read
Your Express App Has No Helmet, No Rate Limit, and a ReDoS in Its Routes. 14 ESLint Rules Catch the Middleware You Forgot.

Your Express App Has No Helmet, No Rate Limit, and a ReDoS in Its Routes. 14 ESLint Rules Catch the Middleware You Forgot.

Comments
8 min read
NestJS Hands You Guards, Pipes, and Throttlers. You — and Your AI — Ship Controllers Without Them. 6 ESLint Rules Catch It.

NestJS Hands You Guards, Pipes, and Throttlers. You — and Your AI — Ship Controllers Without Them. 6 ESLint Rules Catch It.

Comments
8 min read
An SSRF in Your Lambda Steals the Execution Role. Action: '*' Hands Over the Account. 14 ESLint Rules Break the Chain.

An SSRF in Your Lambda Steals the Execution Role. Action: '*' Hands Over the Account. 14 ESLint Rules Break the Chain.

Comments
9 min read
Your Frontend Stores JWTs in localStorage and Posts to '*'. 45 ESLint Rules Catch What the Backend Audit Misses.

Your Frontend Stores JWTs in localStorage and Posts to '*'. 45 ESLint Rules Catch What the Backend Audit Misses.

Comments
9 min read
jsonwebtoken Will Verify a Token Signed With algorithm: none. These 13 ESLint Rules Stop It.

jsonwebtoken Will Verify a Token Signed With algorithm: none. These 13 ESLint Rules Stop It.

Comments
11 min read
MD5, exec(), and Zip Slip: 34 ESLint Rules That Fail Your Node.js CI Before They Ship.

MD5, exec(), and Zip Slip: 34 ESLint Rules That Fail Your Node.js CI Before They Ship.

Comments
8 min read
Performance at Scale: The Static Analysis Standard for 100x Faster Linting

Performance at Scale: The Static Analysis Standard for 100x Faster Linting

Comments
2 min read
Your Vercel AI SDK Agent Has 19 Attack Surfaces. Here's an ESLint Rule for Each.

Your Vercel AI SDK Agent Has 19 Attack Surfaces. Here's an ESLint Rule for Each.

Comments
16 min read
BEGIN on a Postgres Pool Scatters Your Transaction Across Connections. One ESLint Rule Stops It.

BEGIN on a Postgres Pool Scatters Your Transaction Across Connections. One ESLint Rule Stops It.

Comments
6 min read
A Missing client.release() Exhausted Our Postgres Pool at 3 AM. The ESLint Rule That Catches It.

A Missing client.release() Exhausted Our Postgres Pool at 3 AM. The ESLint Rule That Catches It.

Comments
9 min read
A Hardcoded sk_live_ Key Passes Code Review. It Won't Pass These 27 ESLint Rules.

A Hardcoded sk_live_ Key Passes Code Review. It Won't Pass These 27 ESLint Rules.

Comments
10 min read
node-postgres Will Happily Build a CVSS 9.8 SQL Injection For You. 13 ESLint Rules Say No.

node-postgres Will Happily Build a CVSS 9.8 SQL Injection For You. 13 ESLint Rules Say No.

Comments
9 min read
I Mapped the OWASP Top 10 to ESLint Rules. 8 Hold Up. 2 Are Vendor Theater.

I Mapped the OWASP Top 10 to ESLint Rules. 8 Hold Up. 2 Are Vendor Theater.

1
Comments
10 min read
13 Security Questions Every JS Interview Asks — and Why Reciting Them Won't Stop You Shipping the Bug

13 Security Questions Every JS Interview Asks — and Why Reciting Them Won't Stop You Shipping the Bug

Comments
8 min read
The JWT alg:none Attack: Change One Header Field, Forge an Admin Token. One ESLint Rule Blocks It.

The JWT alg:none Attack: Change One Header Field, Forge an Admin Token. One ESLint Rule Blocks It.

1
Comments
5 min read
'3 Lines of Vercel AI SDK Code Are a Prompt-Injection Hole — and "Just Sanitize It" Won''t Close It'

'3 Lines of Vercel AI SDK Code Are a Prompt-Injection Hole — and "Just Sanitize It" Won''t Close It'

Comments
9 min read
Your node-postgres Data Layer Fails 4 Ways in Production. SQL Injection Is Only the First.

Your node-postgres Data Layer Fails 4 Ways in Production. SQL Injection Is Only the First.

Comments
7 min read
AI Coding Assistants Hardcode Secrets. This ESLint Rule Catches Them — in a Format the AI Can Auto-Fix.

AI Coding Assistants Hardcode Secrets. This ESLint Rule Catches Them — in a Format the AI Can Auto-Fix.

Comments
7 min read
Post-Mortem: Why ESLint Performance Failed (And the 100x Fix)

Post-Mortem: Why ESLint Performance Failed (And the 100x Fix)

Comments
2 min read
Same Vulnerable File, 4 Linters: Your Security Plugin Caught 21 of 46. Oxlint Native Caught 1.

Same Vulnerable File, 4 Linters: Your Security Plugin Caught 21 of 46. Oxlint Native Caught 1.

Comments
8 min read
Your Vercel AI SDK Agent Can Delete Your Database. 5 ESLint Rules That Gate Every Tool Call.

Your Vercel AI SDK Agent Can Delete Your Database. 5 ESLint Rules That Gate Every Tool Call.

Comments
6 min read
Your Vercel AI SDK App vs the OWASP LLM Top 10: 8 Categories ESLint Catches in CI — and 2 It Honestly Can't.

Your Vercel AI SDK App vs the OWASP LLM Top 10: 8 Categories ESLint Catches in CI — and 2 It Honestly Can't.

Comments
9 min read
Your Vercel AI SDK App Has a Prompt Injection Vulnerability — in 1 of 3 Places. Here's the ESLint Rule for Each.

Your Vercel AI SDK App Has a Prompt Injection Vulnerability — in 1 of 3 Places. Here's the ESLint Rule for Each.

Comments
6 min read
loading...