Incorrect Type Conversion or Cast
The product does not correctly convert an object, resource, or structure from one type to a different type.
Type conversions often have implications for resource and bounds checking. When types are not converted properly, this can lead to access of out-of-bounds memory or misinterpretation of data.
이 취약점을 수정하는 방법
5개의 Shoulder 탐지 규칙을 기반으로 한 Incorrect Type Conversion 예방 전략.
Use Zod schemas with type inference instead of 'any' to maintain end-to-end type safety in tRPC
import { router, publicProcedure } from './trpc'; - - export const postRouter = router({ - createPost: publicProcedure - .mutation(async ({ input }: { input: any }) => { - return await db.post.create({ data: input }); - }), - - getPost: publicProcedure - .query(async ({ input }: any) => { + import { z } from 'zod'; + + const createPostInput = z.object({ + title: z.string().min(1).max(200), + content: z.string().min(1), + published: z.boolean().default(false), + }); + + export const postRouter = router({ + createPost: publicProcedure + .input(createPostInput) + .mutation(async ({ input }) => { + // input is typed as { title: string; content: string; published: boolean } + return await db.post.create({ data: input }); + }), + + getPost: publicProcedure + .input(z.object({ postId: z.number().int().positive() })) + .query(async ({ input }) => { return await db.post.findUnique({ where: { id: input.postId }, }); }), });
Add type constraints using 'extends' to ensure generic parameters have required properties
- function getIdentifier<T>(entity: T): string { - return entity.id.toString(); // T has no guaranteed 'id' property - } - - function processEntities<T>(items: T[]): void { - items.forEach(item => { - console.log(item.name); // Runtime error if 'name' missing + interface Identifiable { + id: number | string; + } + + interface Named { + name: string; + } + + function getIdentifier<T extends Identifiable>(entity: T): string { + return entity.id.toString(); + } + + function processEntities<T extends Named>(items: T[]): void { + items.forEach(item => { + console.log(item.name); }); }
Enable strict mode in tsconfig.json to activate all strict type-checking options
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", - "strict": false, - "strictNullChecks": false, - "noImplicitAny": false + "strict": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true } }
코드에서 취약점 찾기
Shoulder를 사용하여 코드에서 Incorrect Type Conversion or Cast 패턴을 스캔하세요. 5 규칙.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=704 # Or scan entire project npx @shoulderdev/cli trust .
탐지 규칙 (5)
코드 리뷰에서 주의할 점
이 패턴은 잠재적인 Incorrect Type Conversion or Cast 취약점을 나타냅니다. 코드 리뷰와 보안 감사 중에 찾아보세요.
코드베이스를 스캔하세요: Incorrect Type Conversion or Cast
Shoulder CLI는 전체 코드베이스에서 취약한 패턴을 찾아냅니다.