Hardcoded Connection String Audit for Azure IoT Hub (azure-iot-toolkit) + 7 More VS Code Stacks — 26 rules, 32 snippets

26 rules and 32 safe-replacement snippets across 8 VS Code stacks. Hosted secret scanning is published at $19 per active committer per month (GitHub Secret Protection pricing page); this is a one-time $29, runs on your machine, and sends nothing anywhere.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplacenpmMCP server (npx)Docker Hub
ext install ReadyStack.connection-string-secret-audit
npx @readystack/connection-string-secret-audit <file>
npx @readystack/connection-string-secret-audit --mcp

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 26 rules Connection String & Secret Audit — 8 Stacks checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the full version $29

Runs that same audit across every file in the workspace instead of one, and writes the findings out as a CSV, JSON or HTML file you keep in the repo and hand to a reviewer or an auditor.

One payment, one licence key for this tool. The key is shown right after payment.

GitHub Secret Protection is published at $19 per active committer per month, billed every month and re-counted as committers come and go (GitHub Docs, checked 2026-09-08)

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

The secret GitHub's free scanner will never flag for you

There are two kinds of credential in a repository, and only one of them gets caught.

The first kind is a token a cloud provider issued: a GitHub PAT, an AWS access key, a Stripe key. These have a shape. GitHub's free secret scanning knows that shape, matches it, and tells the provider to revoke it. That system works, and it is free on public repositories.

The second kind is the one you typed yourself:

Server=tcp:reporting.database.windows.net,1433;Database=reporting;User Id=svc_reader;Password=Sup3rSecret!;
TrustServerCertificate=true

No provider issued that password. It has no shape. Nobody can revoke it for you. On GitHub's free tier it is not a partner pattern, so nothing flags it — generic and unstructured secret detection lives inside GitHub Secret Protection, published at $19 per active committer per month, and even then it reports *after* the push has landed.

That second line is worse than the first, and it never gets discussed. TrustServerCertificate=true tells the driver to accept any certificate presented to it. The connection still says "encrypted". It is encrypted to whoever is standing in the middle.

The five that get through

These are all generic patterns. None of them is a partner token, so none of them trips a free scanner:

// 1. an IoT Hub device identity anyone who clones the repo can impersonate
HostName=my-hub.azure-devices.net;DeviceId=sensor-01;SharedAccessKey=aBcD...uvwx=

// 2. a cluster-admin certificate that is not tied to a person and cannot be revoked per-user
az aks get-credentials --resource-group rg --name prod --admin

// 3. a credential that travels into every proxy log and error page that copies the URL
mongodb://admin:[email protected]/db

And in R, where the whole thing gets rendered into an HTML report and emailed:

Sys.setenv(IOTHUB_SAS_TOKEN = "SharedAccessSignature sr=...&sig=...")
con <- DBI::dbConnect(odbc::odbc(), password = "letmein")

What to write instead

Every one of these has a boring, correct form. The point is not that it is hard — it is that you have to remember it at 6pm on the day the build has to be green:

var connectionString = Environment.GetEnvironmentVariable("SQL_CONNECTION_STRING")
    ?? throw new InvalidOperationException("SQL_CONNECTION_STRING is not set.");
token <- Sys.getenv("IOTHUB_SAS_TOKEN")
if (!nzchar(token)) stop("IOTHUB_SAS_TOKEN is not set. Add it to .Renviron, which stays out of git.")

Checking it before the push, not after

Connection String & Secret Audit is a VS Code extension carrying 26 rules and 32 safe-replacement snippets across 8 stacks — Azure IoT Hub, SQL Server, SQLTools, AKS and Kubernetes, .NET MAUI, Java MicroProfile, R, and R Markdown or Quarto.

Auditing the file you have open is free and needs no key, no account, and no upload. It matches all 26 rules, prints each finding with its line number, and any of the 32 snippets drops the environment-variable form in at your cursor. That is the whole job for one file, finished.

What a licence adds is scale and handover: the same audit across every file in the workspace instead of one, and the findings written out as a CSV, JSON or HTML file you keep in the repo and hand to a reviewer. One-time $29, against $19 per committer per month for the hosted equivalent.

Nothing is sent anywhere. The rules run in your editor, on your machine, on a file that has not been pushed yet — which is the only moment any of this is still fixable.

15 seconds — what it actually does

Questions people ask

What does the Connection String & Secret Audit extension actually do?

It reads the file open in VS Code and matches every line against 26 rules for hardcoded credentials: IoT Hub and Service Bus connection strings, SQL Server passwords, TrustServerCertificate=true, committed kubeconfig data, private key blocks, JWTs and credentials embedded in URLs. Each finding prints with its line number, and 32 snippets insert the environment-variable form at your cursor.

Who is this VS Code secret audit extension for?

Developers on Azure IoT Hub, SQL Server, AKS, .NET MAUI, Java MicroProfile and R or R Markdown who work in private repositories. It is aimed at the person who pastes a working connection string to get a build green and means to take it out before pushing, and at the reviewer who has to prove none is left.

Why is GitHub's free secret scanning not enough?

GitHub's free scanning covers partner patterns, meaning token formats a cloud provider issues and can revoke. A password you typed into a connection string is not one of those. Generic and unstructured secret detection sits inside GitHub Secret Protection at $19 per active committer per month, and it reports after the push, not before.

What is free in this extension and what needs a licence?

Free covers one file end to end: the full audit of the open file or the highlighted lines against all 26 rules, all 32 replacement snippets, and the rule list. A licence widens it to scale and to handover, auditing every file in the workspace and exporting the findings as a CSV, JSON or HTML file you keep.

How does the cost compare to a hosted secret scanner or a manual review?

GitHub Secret Protection is published at $19 per active committer per month, so a team of five is $95 every month for as long as they commit. This extension is $29 once per developer, runs locally, and sends no source code to any server. A one-hour manual credential review by a contractor typically costs more than $29.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.