• Home
  • About
    • lahuman photo

      lahuman

      열심히 사는 아저씨

    • Learn More
    • Facebook
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[Nestjs TIP] whitelist 사용시 주의점!

01 Aug 2023

Reading time ~1 minute

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

참고 자료

  • 프로퍼티 제거하기


nestjswhitelistvalidation Share Tweet +1