Plugin: secure-coding
Changelog
Release history and version updates for eslint-plugin-secure-coding
Generated from the release history
Built from this package's CHANGELOG.md at deploy time, so it matches the
version these docs describe. The full cross-package history lives on the
changelog.
5.4.5
- Fix
no-improper-type-validationno longer loses a null guard to a type-only cast.as,satisfies,<T>xandx!erase at compile time, so(payload as object) !== null && typeof payload === 'object'is the same program as the un-cast form the rule already accepts — and is the docs' own ✅ Correct example. Comparing guard operands by node type made the verdict turn on the spelling of a no-op.
5.4.4
- Performance
detect-object-injectionresolves the holder through the scope index
5.4.3
- Fix
detect-object-injectionno longer exempts a holder property that has been replaced. The exemption read the object literal the holder was _created_ with, soflags.bools = {}afterconst flags = { bools: Object.create(null) }left an attacker-controlled key landing in a prototype-bearing object with the rule silent — a false negative in the rule whose whole subject is prototype pollution. A write _through_ the property is still exempt; only a replacement of the property, or a rebinding of the holder, withdraws it.
5.4.2
- Fix
detect-non-literal-regexpresolves a spread of a constant array - Fix
detect-object-injectionhonoursObject.create(null)reached through a property
5.4.1
- Fix
no-improper-type-validationcreditsinstanceofas a null guard - Security
detect-object-injectionmissed the copy loop in its callback spelling
5.4.0
- Fix
detect-object-injectionsees a copy loop keyed byObject.keys - Fix
detect-object-injectionaccepts anas constlookup table - Fix
detect-object-injectionno longer flagsObject.assign(Object.create(null), source)
5.3.5
- Fix
no-insecure-comparisonstops reading two public values as secrets - Fix
no-unchecked-loop-conditionexemptsfor (;;)with a break, as it doeswhile (true)
5.3.4
- Fix
no-hardcoded-credentialsno longer reports CSS as a credential
5.3.3
- FixThe README logo now links to the plugin's own documentation.
5.3.2
- Fixfive rules read a subscripted member the same as its dotted twin
- Fix
value['constructor'].nameis the same brittle type check - Fix
this['password']andreq['body']read the same as their dotted twins - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.2
5.3.1
- Fix
no-hardcoded-credentialsstops reporting error codes and build-tool paths - Fixtemplate text reads assert instead of concatenating null
- Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.1
5.3.0
- Fixsix rules now see
o['k']as the same access aso.k - Fixsanitiser, logger, postMessage and query gates read a subscripted member
- Fix
no-hardcoded-credentialsstops reporting error codes and module paths - Fixsixteen rules read a member spelled with a string subscript
- Fix
ng['$compile'](tpl)compiles the same directive template - Fixtemplate compilation and token generation read a subscripted method
- Fix
console['log'](user.email)logs the same PII asconsole.log - Fixlog levels, deserialisers and fs reads resolve a subscripted method
- Fix
parts['join'](' ')concatenates the same SQL statement - FixLDAP, privilege and loop gates resolve a subscripted member
- Fixthree blind spots that lived in a selector, a regex and a substring list
- FixLDAP escapes and role checks read a subscripted method
- Fix
Object['keys']andgraphql['execute']name the same operations - Fix
userService['elevate'](user, level)is the same privilege operation - Fix
client['search'](baseDN, filter)runs the same LDAP query - Fix
db['query'](sql)is the same SQL sink asdb.query(sql) - FixXPath, password-length, fail-open and regex gates read a subscripted member
- Fix
Math['random']()is recognised as the same weak token source - Maintenanceinjection and privilege checks resolve a property once, not twice
- Fix
ipcRenderer['send'](...)andapp['get'](...)name the same call - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.0
5.2.2
- FixAdd an install-size badge to the README prelude, linking to each package's packagephobia page. npm renders the README from the last publish, so a badge only appears on npmjs.com after a release.
- Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.18.2
5.2.1
- FixStop pointing readers at retired package names.
secure-coding's "extend your coverage" block linkedeslint-plugin-jwtandsequelize-security's prose namedeslint-plugin-pg— both deprecated on npm since #414, and following either installs the frozen pre-rename build rather than the maintained one.
5.2.0
- Feature🐛 Fix — a template literal is a string, in 82 rules that disagreed
- Feature✨ Feature —
no-insecure-comparisongainsreportLooseEquality - Feature✨ Feature —
no-hardcoded-session-tokensgainssessionWords - Feature
detect-weak-password-validationtakespasswordWords - Feature✨ Feature —
no-unsafe-regex-constructiongainsrequestRootNames - Feature🐛 Fix —
no-sql-injectionreads a request by SHAPE, not by the namereq - Feature✨ Feature — the names these rules look for are yours to state
- Fix🐛 Fix —
no-unsafe-regex-constructionreported on dynamic flags alone - Fix
no-mutable-exportsresolves bindings instead of grepping the file text - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.18.0
5.1.4
- Fixfive false positives found by scanning real repositories.
- Fix
no-xxe-injectionreportedparseFromString(text, 'text/html'). - Fix
no-unsafe-deserializationreportedyaml.load()on repositories pinned to js-yaml v4. - Fixtwo more false positives, found by rescanning after the last batch shipped.
- Fix
no-improper-sanitizationreported through asatisfieswrapper. - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.17.3
5.1.3
- FixThree false positives found by reviewing findings on real repositories. #678
- Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.17.2
5.1.2
- Fix
no-xpath-injectionno longer reports React Router wildcard paths. #671 - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.17.1
5.1.1
5.1.0
5.0.0
4.3.0
no-xpath-injectionnow needs evidence rather than names, and every rule carries a CVSS. #563- DependenciesUpdated internal dependencies
4.2.0
- 100% drop-in parity with
eslint-plugin-security, and twelve false-positive fixes. #560
4.1.0
- Fix a command-injection false negative, repair every rule's documentation link, and close the #555
- DependenciesUpdated internal dependencies
4.0.0
3.7.1
no-improper-sanitizationno longer reports.lengthinterpolated into markup. #534
3.7.0
no-directive-injection: stop reporting correct DOMPurify calls, start #531no-hardcoded-credentials:allowInTestsnow defaults totrue. #531no-redos-vulnerable-regex: an invalid regex is no longer reported as a ReDoS #531no-redos-vulnerable-regexno longer overrules its own NFA analysis with #531no-sensitive-data-exposurenow reads property accesses and template literals #531
3.6.1
- no-xpath-injection: require the string to reach an XPath evaluator #490
- DependenciesUpdated internal dependencies
3.6.0
- Drop
no-unchecked-loop-conditionfromrecommended— and from every preset derived from it #458 - Stop reporting on evidence that lives in another file, or on no LDAP evidence at all #475
no-sensitive-data-exposureno longer reports prose that mentions a credential, #468no-weak-password-recoveryno longer calls a token predictable without #468no-unlimited-resource-allocationno longer reports passport-jwt as a ZIP bomb. #468- DependenciesUpdated internal dependencies
3.5.0
- Drop
detect-object-injectionfrom therecommendedpreset #372 detect-object-injection: decide numeric keys by provability, not by variable name. #323detect-object-injection: resolve index expressions through scope, and drop the index-name allowlist. #323- Correct the declared ESLint floor:
^8.0.0→^8.40.0. #407 no-improper-sanitizationno longer reports developer-authored output or code #457- Stop
no-improper-sanitizationreporting static developer-authored HTML #441 no-unchecked-loop-conditionno longer infers user input from identifier names. #459- Correct the ESLint peer range shown in the README Compatibility table. #423
meta.hasSuggestionsnow matches what each rule actually emits. #309- Two more false-positive classes from the whole-ruleset sweep. #417
no-xpath-injectionno longer treats every path join as XPath construction. #422- DependenciesUpdated internal dependencies
3.4.4
- Ship the JavaScript without tsc's layout. #411
- DependenciesUpdated internal dependencies
3.4.3
- Document every rule option, and add
descriptionto the schemas that had none #383 - Load rule modules on demand instead of at plugin load. #381
- Declare what we support, load only what we use #381
- Fix the
dangerousCharsOptions row, which rendered as truncated code #390 - Fix the
./oxlintsubpath export, which pointed atsrc/oxlint.js— a file no build produces.require('<package>/oxlint')threw MODULE_NOT_FOUND on every published package, while every README documented that exact wiring for oxlint'sjsPlugins. The export now points at the build output,dist/src/oxlint.js. #335 - DependenciesUpdated internal dependencies
3.4.2
1.0.0
- Initial release with 48 security-focused ESLint rules
- LLM-optimized error messages with CWE references and OWASP mapping
- Three preset configurations:
recommended,strict,owasp-top-10 - Full ESLint 9 flat config support
- TypeScript support
no-sql-injection- SQL injection preventiondatabase-injection- Comprehensive SQL/NoSQL/ORM injectiondetect-eval-with-expression- Dynamic eval() detectiondetect-child-process- Command injection detectionno-unsafe-dynamic-require- Dynamic require() preventionno-graphql-injection- GraphQL injection preventionno-xxe-injection- XXE injection preventionno-xpath-injection- XPath injection preventionno-ldap-injection- LDAP injection preventionno-directive-injection- Template injection preventionno-format-string-injection- Format string injection preventiondetect-non-literal-fs-filename- Path traversal detectionno-zip-slip- Zip slip vulnerability preventionno-toctou-vulnerability- TOCTOU race condition detectiondetect-non-literal-regexp- ReDoS detection in RegExpno-redos-vulnerable-regex- ReDoS pattern detectionno-unsafe-regex-construction- Unsafe regex preventiondetect-object-injection- Prototype pollution detectionno-unsafe-deserialization- Unsafe deserialization preventionno-hardcoded-credentials- Hardcoded secrets detectionno-weak-crypto- Weak algorithm detectionno-insufficient-random- Weak randomness detectionno-timing-attack- Timing attack preventionno-insecure-comparison- Insecure comparison detectionno-insecure-jwt- JWT security issues detectionno-unvalidated-user-input- Input validation enforcementno-unsanitized-html- XSS via innerHTML preventionno-unescaped-url-parameter- URL parameter XSS preventionno-improper-sanitization- Output encoding enforcementno-improper-type-validation- Type confusion preventionno-missing-authentication- Auth check enforcementno-privilege-escalation- Privilege escalation detectionno-weak-password-recovery- Secure password reset enforcementno-insecure-cookie-settings- Cookie security enforcementno-missing-csrf-protection- CSRF protection enforcementno-document-cookie- Direct cookie access detectionno-missing-cors-check- CORS validation enforcementno-missing-security-headers- Security header enforcementno-insecure-redirects- Open redirect preventionno-unencrypted-transmission- HTTPS enforcementno-clickjacking- Clickjacking preventionno-exposed-sensitive-data- Data exposure preventionno-sensitive-data-exposure- Log sanitization enforcementno-buffer-overread- Buffer safety enforcementno-unlimited-resource-allocation- Resource limit enforcementno-unchecked-loop-condition- Infinite loop preventionno-electron-security-issues- Electron security enforcementno-insufficient-postmessage-validation- postMessage validation
3.4.1
- Re-publish every package so npm carries the optimised artifact #338
- DependenciesUpdated internal dependencies
3.4.0
- Cut false positives in five security rules, measured against a 1,470-file corpus (webpack
lib/, lodash, eslint-plugin-importsrc/, and two NestJS boilerplates). #288 - Rewrite
descriptionandkeywordson every published package for npm search discovery. npm ranks on name, description, and keywords, and the registry only picks up these fields at publish — so this is metadata-only and takes effect for each package on its next release. #294 - Cut two false positives confirmed against the benchmark corpus SAFE fixtures. #296
- DependenciesUpdated internal dependencies
3.3.4
- Docsdocs: dual-logo README header (Interlace mark + ESLint mark side by side) and closing Interlace footer — refreshes the README rendered on npmjs.com. No runtime changes. #269
- DependenciesUpdated internal dependencies
3.3.3
- Fix Codecov badge showing "unknown" — switch from flag to component URL format #252
3.3.2
- CI-only: pin all coverage thresholds at 100% (integration target, merges last). #225
3.3.1
- Align every security rule's
meta.docs.cvssto the CVSS its finding actually #213
3.3.0
- Add
recommended-strictpreset + quick-start in README #170 - Fixfix(detect-object-injection): suppress ~3,470 Edge false positives via four new safe-pattern guards #137
- Fixfix: ILB-Wild FP reduction + doc examples + doc-test-alignment scanner fixes #144
- Fixfix: remove false
meta.fixable: 'code'declarations from 21 rules that had nofix()function #141 - feat+fix: ILB-Wild FP reduction + two new quality rules #148
- DependenciesUpdated internal dependencies
3.2.0
- New
./oxlintsub-export for use with oxlint's JS plugin API. Wire it via{ "jsPlugins": ["eslint-plugin-secure-coding/oxlint"] }in.oxlintrc.json. Exposes the same rule set as the main entry; rules degrade gracefully when type information is unavailable (oxlint's JS plugin context does not provideparserServices). The default ESLint entry (./) is unchanged.
3.0.2
- detect-object-injection: Replaced
getText()+ regex with AST-based validation (~4x faster) - detect-non-literal-fs-filename: Replaced
getText()+ regex with AST-based validation - no-timing-attack: Set-based O(1) lookups for sensitive variables and auth patterns
- no-buffer-overread: Set-based O(1) lookups for buffer methods and user-controlled keywords
- no-missing-csrf-protection: Set-based O(1) lookups for protected HTTP methods
- detect-child-process: Set-based O(1) lookups for dangerous child_process methods
3.0.1
- detect-object-injection: Reduced false positives by detecting validation patterns:
- detect-non-literal-fs-filename: Allow safe path patterns:
- no-timing-attack: Skip false positives in timing-safe contexts:
- no-unsanitized-html: Track sanitized variables:
- no-unlimited-resource-allocation: Allow safe static paths:
3.0.0
- OWASP Mobile Top 10 Coverage: Added 40 new rules targeting mobile security risks (M1-M10).
- New Presets:
- Documentation:
- Recommended Config: Now includes critical mobile security rules for hybrid web/mobile apps.
- Rule Improvements: Refined AST detection for
no-clickjackingandno-unvalidated-deeplinksto reduce false positives.
View on GitHub →
Building secure JavaScript with Interlace? Star the repo to get new rules and CWE coverage as we ship them — or follow the AI-code-security benchmarks behind them.