tRPC Procedure Missing Input Validation
Description
tRPC procedures without .input() validation accept unvalidated payloads at runtime, enabling injection and type confusion attacks.
What Shoulder detects
How to fix
Add Zod schema validation with .input() to all procedures.
```typescript
import { z } from 'zod';
export const userRouter = router({
getUser: publicProcedure
.input(z.object({
userId: z.number().int().positive()
}))
.query(async ({ input }) => {
return await db.user.findUnique({ where: { id: input.userId } });
})
});
```
Learn more: https://shoulder.dev/learn/typescript/cwe-20/missing-input-validation
Applies to
Languages
Frameworks
trpc
References
Scan for this issue
Detect with Shoulder CLI
npx @shoulderdev/cli trust --rule=trpc-missing-input-validation .
Real-world examples
Known CVEs in the Improper Input Validation vulnerability class that this rule helps detect.