티스토리 뷰
728x90
반응형
nestjs의 dto는 우리가 별다른 노력을 들이지 않아도 입력값을 자동으로 dto 클래스에 매핑을 하여
손쉽게 사용할수 있도록 도와줍니다
export class CreateUserDto {
username: string;
password: string;
email: string;
role: string;
}
이러한 dto 클래스를 선언했다고 생각해봅니다
유저 생성시에 post body를 통해 위에 선언된 같은 이름의 변수들을 받아서 매핑을 합니다
그런데 만약 post body로 class에 선언되지 않은 파라메터들이 추가로 오는 경우 어떻게 될까요?
{
"username": "hello",
"phone": "01011112222"
}
이렇게 post body에 phone이라는 정의되지 않은 필드를 전달합니다
그리고 controller내에서 실제 전달받은 createUserDto를 바로 콘솔상에서 출력을 해보면
CreateUserDto { username: 'hello', phone: '01011112222' }
이렇게 phone값이 인스턴스내에 저장되어있는것을 알수 있습니다
하지만 클래스 선언에 phone을 선언하지 않았기 때문에
IDE상에서 타입힌트나 자동완성과같은 도움을 받을수는 없습니다
하지만 분명 변수와 값은 존재합니다
그렇기 때문에 dto를 바로 전달받아 그걸 그대로 리소스를 생성하는 경우 예상치 못한 보안 문제가 발생할수 있습니다
app.useGlobalPipes(
new ValidationPipe({
transform: true,
whitelist: true,
}),
);
이때 활용할수 있는 validationpipe의 whitelist 옵션이 있습니다
이 옵션은 기본적으로는 off 상태인데 true로 전달하는 경우 활성화가 되어
클래스에 선언된 변수들만 처리하고 그 외의 변수들은 버립니다
상황에 맞춰 사용하시면 참 좋겠죠?
728x90
반응형
'BACKEND' 카테고리의 다른 글
aws에서 nodejs 16버전을 쓰고 싶으시다구요? (0) | 2023.04.21 |
---|---|
mongoose, nestjs에서 discriminator 사용해보기 (1) | 2023.04.20 |
nestjs API Rate Limit 적용하기 (0) | 2023.01.17 |
[nestjs] versioning 기능 이용하기 (1) | 2022.09.19 |
[nestjs] validation error 핸들링 (0) | 2022.09.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 아이폰
- Apple
- AWS
- 경진대회
- 앱
- 창업
- iPhone
- 게임
- 스마트폰
- 대학생
- 트위터
- JavaScript
- 자바스크립트
- android
- 안드로이드
- 어플리케이션
- 아이디어
- 벤처
- 애플
- 모바일
- php
- 웹표준
- 네이버
- CSS
- 구글
- 소프트웨어
- 공모전
- 앱스토어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함