sqlguard is pre-1.0. Security fixes are applied to the latest released minor
version. Until 1.0, only the most recent 0.x release is supported.
| Version | Supported |
|---|---|
latest 0.x |
✅ |
| older | ❌ |
Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.
Instead, use one of the following private channels:
- GitHub private vulnerability reporting (preferred) — open a report via
the repository's Security → Report a vulnerability tab
(
https://github.com/KARTIKrocks/sqlguard/security/advisories/new). - Email —
kartik.rajput622001@gmail.comwith a subject line starting[sqlguard security].
Please include:
- the affected module(s) and version/commit,
- a description of the issue and its impact,
- steps to reproduce (a minimal repro or PoC is ideal),
- any suggested remediation.
You can expect an acknowledgement within 5 business days. We'll keep you informed as we investigate and work on a fix, and we'll credit you in the release notes / advisory unless you prefer to remain anonymous.
sqlguard is a defensive tool — it analyzes SQL for risky patterns and is designed to fail safe. A few invariants are part of its security contract; bugs that break them are in scope:
- Redaction by default. A
Resultmust never carry raw literal values out of the process:Result.Queryis redacted andResult.Fingerprintmust be PII-free. A path that leaks literals to a reporter/log is a security bug. - EXPLAIN never executes the statement. The
explainanalyzer validates input (comment/string-aware multi-statement rejection,SELECT/WITH-only by default) and runs every plan inside an always-rolled-back, read-only transaction. A way to makeexplainmutate data or run a second statement is in scope. - The middleware must not alter query semantics or results. It observes; it must not change what the underlying driver returns.
Out of scope: vulnerabilities in third-party dependencies (report those
upstream; we'll bump once fixed), and misuse such as deliberately disabling
redaction with WithRawQuery() / redact: false.