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
예제)
'security: study > 시큐어코딩' 카테고리의 다른 글
| [JS] 1주차 스터디 내용 (0) | 2024.01.10 |
|---|---|
| [JS] raw SQL vs query builder vs ORM (0) | 2024.01.06 |
| 자바스크립트 난독화(Javascript Obfuscation) (0) | 2024.01.05 |
| 자바스크립트 시큐어코딩 가이드: 입력값,보안기능 (0) | 2023.12.29 |
