Skip to content
Back to skills

Typescript Security

ASecurity

String concatenation with user input is SQL injection-prone. Validate the input at the request boundary and pass values separately through a parameterized query or a type-safe ORM: ```ts const query = z.object({ email: z.string().email() }); const parsed = query.safeParse(req.query); if (!parsed.success) { res.status(400).json({ error: "invalid_request" }); return; } const result = await pool.query<UserRow>( "SELECT id, email FROM users WHERE email = $1", [parsed.data.email], ); ``` Do not in...

  • 549 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 5, 2026
developmentshellsqlapidatabase

Works with

  • api

Security analysis

A100/100

Pro scans all 15 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add HoangNguyen0403/agent-skills-standard --skill typescript-security --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Typescript Security?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Typescript Security
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hoangnguyen0403-typescript-security-d9f6e55b/badge)](https://www.skillsdirectory.com/skills/hoangnguyen0403-typescript-security-d9f6e55b)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
String concatenation with user input is SQL injection-prone. Validate the input at the request boundary and pass values separately through a parameterized query or a type-safe ORM:

```ts
const query = z.object({ email: z.string().email() });
const parsed = query.safeParse(req.query);
if (!parsed.success) {
  res.status(400).json({ error: "invalid_request" });
  return;
}

const result = await pool.query<UserRow>(
  "SELECT id, email FROM users WHERE email = $1",
  [parsed.data.email],
);
```

Do not interpolate `parsed.data.email` into the SQL string. Use Prisma/TypeORM query APIs where appropriate; if raw SQL is unavoidable, use the driver's parameter binding (or `Prisma.sql`), least-privileged database credentials, and no shell or dynamic execution.

Files in this skill

  • eval-1.baseline.md1.3 KB
  • eval-1.with-skill.md1.2 KB
  • eval-2.baseline.md975 B
  • eval-2.with-skill.md854 B
  • eval-3.baseline.md894 B
  • eval-3.with-skill.md763 B
  • eval-4.baseline.md862 B
  • eval-4.with-skill.md882 B
  • eval-5.baseline.md1009 B
  • eval-5.with-skill.md870 B
  • trigger-1.md149 B
  • trigger-2.md142 B
  • trigger-3.md146 B
  • trigger-4.md115 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…