[Nest] payload


정의되지 않은 페이로드를 필터링하는 기존 Express에서,

로직을 작성하거나 다른 라이브러리를 첨부하여 데이터를 검증했습니다.

그러나 Nest는 내장 기능을 제공합니다.

먼저 다음 명령을 사용하여 필요한 패키지를 설치합니다.

yarn add class-validator class-transformer

DTO에서 속성과 유형은 다음과 같이 별도로 작성됩니다.

export class CreateUserDto {
  name: string;
  id: string;
  pw: string;
}

그리고 공식 문서에 따르면 다음과 같이 파이프라인 검사 기능이 main.ts에 추가되었습니다.

 app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true
    })

공식 문서에 따르면 정의되지 않은 속성은 페이로드에 전달되어서는 안 됩니다.



위와 같이 BadPayload를 날려버리면 모든 페이로드가 의도치 않게 넘어오는 현상이 발생했습니다.

공식 문서를 보면 다음과 같이 나와 있습니다.

true로 설정하면 유효성 검사기가 유효성 검사 데코레이터를 사용하지 않는 유효성 검사(반환) 개체의 모든 속성을 제거합니다.

따라서 데코레이터를 사용하지 않는 속성을 제거하는 것처럼 들리지만 이전에 유형을 정의한 dto에 데코레이터를 추가해 보겠습니다.



그런 다음 다시 구울 때 정의되지 않은 badPayload 속성이 제거되고 표시되었습니다.

다만 이상한 것이 들어와서 페이로드를 받아들이지 않는 것보다는 악의적인 접근이라고 보고 오류를 내뱉는 것이 안전하다고 생각했습니다.

이전에 VaildationPipe에서 금지허용되지 않음 속성을 추가해 보겠습니다.



이제 정의되지 않은 속성을 트리거하면 이러한 오류 메시지와 함께 상태 400이 반환됩니다.

개발 환경에서는 도움이 되지만 프로덕션 환경에서 오류를 숨기고 싶다면

오류 메시지 비활성화 속성도 추가하면 아래와 같이 자세한 오류 정보가 표시되지 않습니다.



이는 안전한 백엔드에 한 걸음 더 가까워진 것입니다.