설명
누락될 수 있는 요청 값을 검사하지 않고 속성 접근, 메서드 호출, 길이 계산에 사용하면 예외가 발생합니다.
잠재적 영향
- 공격자가 필수 파라미터를 생략해 오류 응답을 유발하고, 예외 처리나 부하 조건에 따라 가용성에 영향을 줄 수 있습니다.
- 예외 처리 방식에 따라 내부 상태나 오류 메시지가 노출될 수 있습니다.
해결 방법
- 요청 값은 사용하기 전에
value != null, 스키마 검증, 기본값 설정으로 확인하세요. - 필수 요청 값은 검증 계층에서 요구 사항을 선언하고 누락 시 명확한 오류를 반환하세요.
예시
Express 5의 라우트 일부입니다. 이 버전의 res.send(number)는 숫자를 JSON으로 반환합니다.
변경 전
javascript
app.get("/length", (req, res) => {
const id = req.query.id;
res.send(id.length);
});
변경 후
javascript
app.get("/length", (req, res) => {
const id = req.query.id;
if (id == null) {
return res.status(400).end();
}
res.send(id.length);
});
설명:
- 변경 전:
req.query.id나req.body.name처럼 누락될 수 있는 요청 값을 검사하지 않고 속성 접근, 메서드 호출, 길이 계산에 사용하면 예외가 발생합니다. - 변경 후: 누락된 값을 400으로 거부한 뒤 길이를 읽습니다. null 검사만으로 타입과 형식까지 검증되는 것은 아니므로, 필요한 문자열 형식과 길이도 별도로 확인하세요.