시스템 자원접근 및 명령어를 수행할 때 입력값에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
(입력데이터 검증 및 표현) 코드 삽입
(입력데이터 검증 및 표현) 경로 조작 및 자원 삽입
(입력데이터 검증 및 표현) 서버사이드 요청 위조
(입력데이터 검증 및 표현) 운영체제 명령어 삽입
① 외부 입력값을 이용하여 시스템자원(IP, PORT번호, 프로세스, 메모리, 파일 등)을 식별하는 경우 허가되지 않은 자원 사용 제한
② 서버 프로그램 안에서 쉘을 생성하여 명령어를 실행해야 하는 경우 외부 입력값에 의해 악의적인 명령어가 실행 제힌
①외부입력값이 프로그램 내부에서 사용하는 리소스를 결정하는데 직접적으로 사용되지 않도록 설계.
즉, 기능 설계 시 사용해야 하는 리소스 목록을 정의하여 지정된 범위 안에서 리소스를 선택하여 사용
→ 리소스 목록은 프로퍼티파일이나 XML파일로 정의하여 리소스 정보를 변경하는 경우 프로그램 수정을 최소화할 수 있도록 관리
사용자의 요청 리소스가 특정 디렉토리 내의 모든 파일인 경우, 모든 파일명을 목록화하는 것은 어렵다.
→이런 경우는 입력값 중 경로조작을 일으킬 수 있는 문자(.. / ₩) 문자를 제거하고 사용하여 지정된 경로 내의 파일만 접근 가능하도록 시큐어코딩 규칙을 정의한다.
② 서버프로그램 안에서 쉘을 생성해서 명령어가 실행되는 구조를 가지지 않도록 설계
ㅇ외부 입력값이 직접적으로 명령어의 일부로 사용되지 않도록 해야 한다.
→명령어의 일부로 사용되어야 하는 값들을 목록화하여 목록 내에 있는 값들로만 명령어가 조립되어 실행될 수 있도록 제한
ㅇ목록화되어 있는 값들이 경우에 따라 변경되어야 한다면,
→이로 인해 프로그램이 수정되지 않도록 프로퍼티파일이나 XML파일을 사용하여 허용목록 작성
ㅇ외부 입력값은 목록화된 정보를 검색하는 인덱스값으로 사용하여 시스템 명령어 사용 최소화