We like to think our code is getting safer with every new tool we bolt onto the CI pipeline. Static analysis, linters, automated scanners—they’re supposed to be our digital watchdogs, sniffing out trouble before it ever hits production. But what happens when the watchdogs start barking at shadows? Or worse, when they’re so overwhelmed by imaginary threats that they can’t even hear the real danger? This is the grim reality laid bare by a recent benchmark of ESLint security plugins, and the numbers aren’t just disappointing; they’re a critical indictment of our current approach.
At the heart of the problem lies a concept familiar to anyone who’s ever debugged a noisy system: the false positive. It’s the linter’s equivalent of a smoke detector that blares every time you toast bread too dark. Annoying, sure, but when it happens repeatedly, developers learn to tune it out. And that’s precisely where the danger lurks. The analysis here isn’t just about catching vulnerabilities; it’s about understanding the architecture of developer trust—and how easily it can be eroded.
The benchmark, meticulously crafted with 40 known vulnerable code patterns and 38 carefully constructed safe patterns, put six popular ESLint security plugins through their paces. The goal: a granular look at not just detection rates (recall), but also the accuracy of those detections (precision). This is where the real story unfolds.
The ‘False Positive Tax’ Explained
It’s not enough for a security tool to find some vulnerabilities. It needs to be precise. A tool with high recall but low precision becomes a productivity sinkhole. Developers get bogged down investigating non-issues, leading to what the analysis coins the ‘False Positive Tax’—the cost of developer time spent dealing with incorrect alerts. This tax isn’t just a minor inconvenience; it’s a direct contributor to alert fatigue, a phenomenon that can lead to critical warnings being ignored, rules being disabled wholesale, or even security checks being bypassed entirely.
This brings us to the star of the show, or perhaps the villain: eslint-plugin-security. This plugin, despite its seemingly straightforward purpose, exhibits a devastating 1:1 true positive to false positive ratio. For every genuine security flaw it identifies, it flags an equally significant number of perfectly safe code constructs as problematic. That’s not just bad; that’s a recipe for developer nihilism when it comes to security alerts.
eslint-plugin-securityhas a 1:1 true positive to false positive ratio— for every real issue it catches, it incorrectly flags a safe pattern.
And the indictment doesn’t stop there. eslint-plugin-sonarjs, a plugin with a massive 269 rules, manages to detect only 35% of the actual vulnerabilities tested. Most of its rules, it turns out, are geared towards general code quality rather than specific security threats, diluting its impact. Even eslint-plugin-security-node, marketed as a successor, struggles, missing a staggering 82.5% of vulnerabilities. It’s a bleak picture.
Why Does This Matter for Developers?
This isn’t just an academic exercise in metric optimization. The architectural shift we’re witnessing is a quiet crisis in developer experience. For years, the promise has been that tooling will automate tedious and complex tasks, including security. But when the automated solution actively hinders productivity and erodes trust, we’re back to square one, only with more overhead. The tools designed to protect us are, in effect, becoming obstacles.
Consider the testing methodology: 40 vulnerable patterns across 14 categories (like SQL injection, command injection, hardcoded credentials) versus 38 safe patterns that shouldn’t trigger warnings. This thoroughness is crucial. It’s designed to differentiate between genuine threats and developer misinterpretations. The safe code examples include strong practices like parameterized SQL queries, environment variables for credentials, and proper input sanitization using libraries like DOMPurify.
The results speak for themselves. The Interlace Ecosystem, a collection of tools apparently designed with a more sophisticated understanding of both security and developer workflow, achieved a perfect score: 40/40 detections with zero false positives. This isn’t just a win; it’s a blueprint. It demonstrates that achieving high recall and high precision simultaneously isn’t a pipe dream; it’s a design choice.
The eslint-plugin-security itself is shown to be quite broken. It crashes on ESLint 9, meaning its current security findings are based on an older version of the tool. All other plugins were tested on the latest ESLint 9.39.2. The older plugin is effectively a relic, yet it’s likely still widely adopted due to inertia or lack of awareness of its shortcomings.
The Future of Security Linting
This analysis forces a critical re-evaluation of how we approach automated security checks. Simply adding more rules or more plugins isn’t the answer. The focus needs to shift from sheer detection volume to intelligent, context-aware analysis that respects developer time and workflow. The Interlace Ecosystem’s success suggests a path forward: tooling that understands secure coding patterns deeply and avoids flagging them incorrectly.
My unique insight here is that this isn’t just about flawed linters; it’s about a broader tension in software development between automation and human judgment. When automation becomes unreliable, it doesn’t just fail to help; it actively impedes the human element that it was supposed to augment. The ‘False Positive Tax’ is, in essence, the price we pay for unreliable automation.
The implications are clear: organizations relying heavily on tools like eslint-plugin-security might be operating under a dangerous illusion of security, all while frustrating their development teams. The real security doesn’t come from a linter that yells wolf; it comes from tools that empower developers to build securely without being drowned out by noise.
🧬 Related Insights
- Read more: Google Slashes AI Ultra Price to $200, Adds $100 Tier
- Read more: Ditching querySelector: How Native DOM Traversal Builds Bulletproof JS Apps
Frequently Asked Questions
What does eslint-plugin-security actually do?
eslint-plugin-security is a tool designed to analyze JavaScript and TypeScript code for potential security vulnerabilities directly within the ESLint static analysis framework.
Why are false positives a problem for security tools? False positives incorrectly flag safe code as vulnerable. This leads to ‘alert fatigue,’ where developers begin ignoring warnings, disabling rules, or bypassing security checks entirely, which can cause real vulnerabilities to be missed.
Is eslint-plugin-security still actively maintained?
The article indicates eslint-plugin-security is broken on ESLint 9 and its last update was in 2024, suggesting its maintenance status is questionable and its compatibility is a significant issue.