npx claudepluginhub thejefflarson/soundcheck --plugin soundcheckThis skill uses the workspace's default tool permissions.
Protects against SQL, command, and template injection caused by passing
Audits Python code for injection vulnerabilities including command execution (subprocess, os.system), SQL queries (cursor.execute, sqlalchemy.text), eval/exec calls, and template rendering (Jinja2, Mako SSTI).
Detects SQL injection where user input reaches query construction via string concatenation, template literals, or ORM raw methods in JS/TS, Python, Go, Ruby, PHP. For auditing database apps.
Detects SQL injection vulnerabilities by tracing user inputs through code to database queries, flagging unsafe patterns like concatenation and unparameterized ORMs. Scans frameworks including Django, Rails, Express, Go.
Share bugs, ideas, or general feedback.
Protects against SQL, command, and template injection caused by passing
user-controlled data to an interpreter without sanitization. Exploitation leads to
full database read/write, remote code execution, and data exfiltration.
For NoSQL-specific injection (MongoDB operator injection, $where), see nosql-injection.
"SELECT * FROM users WHERE id = " + userId — user input concatenated into SQLexec("convert " + filename) — shell expansion allows ; rm -rf /eval(userInput) — arbitrary code execution from user-supplied stringTemplate("Hello " + name) — template body built from user inputFor each vulnerable call site, apply the appropriate control:
Environment(autoescape=True) (bool literal, not select_autoescape() with from_string()). Go: html/template, never text/template for HTTP output. Java FreeMarker: cfg.setOutputFormat(HTMLOutputFormat.INSTANCE). Rust: handlebars (escapes by default). Never build the template body from user input.Flag the vulnerable call site, explain the risk and the correct fix pattern, then continue with the original task.
Confirm the following properties hold (language-agnostic):
eval/exec, JS eval/new Function, etc. removed — not replaced with a safer-looking variant of the same function)render_template, Go html/template, Rust handlebars, Jinja2 Environment(autoescape=True) — NOT Jinja2 Template() direct, NOT Go text/template), and user values are passed through the engine's parameter interface — never by building the template body from user input