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에서 확인 가능합니다.