자바스크립트 시큐어코딩 가이드: 시간 및 상태~ API 오용

3. 시간 및 상태

-종료되지 않는 반복문 또는 재귀 함수 

재귀 함수의 순환 횟수를 제어하지 못해 메모리나 스택이 과용되면 위험 

 

재귀 호출 시 호출 횟수 제한, 종료 조건 정확하게 정의 

예제)


4. 에러처리 

-오류 메시지 정보노출 

예외 이름이나 traceback 출력 X 

ExpressJS에서 HTTP 오류 코드가 있는 요청을 처리하기 위한 errorHandler 미들웨어 제공 

예제)

 

-오류상황 대응 부재 

오류가 발생할 수 있는 부분에 제어문 달기 

 

-부적절한 예외 처리 

값을 반환하는 모든 함수 결과값 검사 


5. 코드오류 

-Null Pointer 역참조 

널포인터의 역참조: 그 객체가 null이 될 수 없다는 가정 위반 

의도적으로 널 포인터 역참조 발생 -> 예외 상황 악용 

자바스크립트에서는 null pointer dereference 발생 x 

null 객체가 사용되지 않고 undefined로, null 개체는 null값을 가짐

정의되지 않음과 없음을 다르게 처리 

 

undefined과 null을 구분하여 처리 

예제) 

 

-부적절한 자원 해제 

파일 식별자, 힙 메모리, 소켓은 유한 자원 -> 할당 받고 다 쓰면 반환 필요 


6. 캡슐화 

-잘못된 세션에 의한 데이터 정보 노출 

다중 스레드 환경 -> 싱글톤 객체 필드에 경쟁조건 발생 가능 

전역 변수가 포함되지 않도록 코드 작성 -> 서로 다른 세션에서 데이터 공유 X 

 

싱글톤 패턴 사용 -> 변수 범위 주의 

다중 스레드 환경, 클래스 변수값은 하위 메소드와 공유 

-> 필요 시 인스턴스 변수로 선언 

예제) 

 

-제거되지 않고 남은 디버그 코드 

디버깅 목적의 코드 -> 개발이 끝나면 제거 

자바스크립트 console.log 또는 console.error 함수로 디버그 메시지 출력 

완료 후 디버깅 목적 코드는 오버라이드 -> 콘솔 로그 출력 X 

ExpressJS는 기본적으로 디버그 모드 비활성화에서 동작 

예제)

ReactJS

ExpressJS

 

-Public 메소드로부터 반환된 Private 배열 

private로 선언된 배열을 public으로 선언된 메소드로 반환 X 

private 배열에 대한 복사본 반환 

배열의 원소는 Object.assign() 메소드로 의도치 않은 수정 방지 

예제) 

 

-Private 배열에 Public 데이터 할당 

public으로 선언된 메소드의 인자를 private으로 선언된 배열에 저장 X 

클래스 외부에서 private 값 변경 X 

필요 시 인스턴스 변수로 정의, 값의 정상 여부 확인 

예제) 


7. API 오용 

-DNS lookup에 의존한 보안결정 

DNS 엔트리 속일 수 있음 -> 도메인명에 의존하여 보안결정 X 

DNS lookup에 도메인명 이용 X 

예제)