-
[Nestjs TIP] whitelist 사용시 주의점!NodeJS 2024. 6. 18. 17:18728x90
whitelist 옵션 사용시 주의점!
프로퍼티 제거하기
또한, 유효성 검사 파이프는 메서드 핸들러가 수신해서는 안 되는 프로퍼티를 필터링할 수 있습니다. 이 경우 허용 가능한 속성을 화이트리스트에 추가할 수 있으며, 화이트리스트에 포함되지 않은 속성은 결과 객체에서 자동으로 제거됩니다. 예를 들어, 처리기에서 이메일 및 비밀번호 속성을 기대하지만 요청에 나이 속성도 포함된 경우 이 속성은 결과 DTO에서 자동으로 제거될 수 있습니다. 이러한 동작을 사용하려면 화이트리스트를 true로 설정하세요.
app.useGlobalPipes( new ValidationPipe({ whitelist: true, }), );
적용 실패 원인 분석
프로퍼티 제거하기를 보고 whitelist를 추가 했더니, 빈 객체가 넘어오는 문제가 발생했습니다.
아래는 빈 객체가 넘어온 class 코드 입니다.
// DTO export class UserDto { id: number; username: string; } // Controller @ApiOperation({ summary: '사용자 정보' }) @ApiResponse({ status: 201, type: TodoVo }) @Post() save(@AuthUser() userVo: UserVO, @Body() userDto: UserDto) { return this.service.save(UserDto, userVo.seq); }
원인으로 DTO에 검증 규칙이 정의 되지 않아서 발생한 문제였습니다.
아래와 같이 DTO에 검증 규칙을 추가하면 객체에 값이 할당되어 넘어오게 됩니다.
export class UserDto { @IsNumber() id: number; @IsString() username: string; }
whitelist 옵션은 검증되지 않는 값(검증 규칙이 없는)을 제외 처리 하는 옵션으로 보안상 처리를 위해서 사용하는 것을 권고 합니다.
사용한 전체 코드는 daily-quest에서 확인 가능합니다.
참고 자료
728x90'NodeJS' 카테고리의 다른 글
Typescript에서 특정 key를 가진 타입 생성 (0) 2024.06.25 nestjs에서 guard에 Global service Inject 처리 (0) 2024.06.20 [Nestjs TIP] Request Header에 validate 처리 (0) 2024.06.17 nestjs에서 registerAsync 사용시 isGlobal 설정 (0) 2024.06.12 nestjs에서 swagger사용시, generic 타입에 대한 response schema 처리 (0) 2023.06.05