🔐 소프트웨어 개발 보안 구축 #2 - 입력데이터 검증 및 표현

2020. 7. 14. 12:53컴퓨터언어/소프트웨어공학

728x90
반응형

 

👍 입력데이터 검증 및 표현이란?

 

일반적으로 소프트웨어는 사용자에게 데이터를 입력하는 방식을 가지고 있다.

사용자의 모든 정보가 회원가입, 로그인, 주문서작성 등 개발자가 준비한 FORM에 맞추어 일정한 양식으로 전송되는 것이다.

문제는 "전송"될 때 보안에 취약할 수 있다는 것이다.

그래서 개발자는 사용자가 입력할 입력데이터가 실제로 안전할지 <구현>단계에서 검증해야 한다.

즉, 개발자는 입력데이터에 대한 "유효성 검증체계"를 미리 갖추어, 이 검증에 실패할만한 데이터가 입력되는 경우에 대비하여 에러처리 루틴을 구현해야하는 것이다.

예를 들어, 개발자는 사용자가 입력한 정보가 개발시 미리 계획한 자료형과 일치하는지 확인하고 일관된 언어셋(컴퓨터가 문자를 처리하기 위한 방식으로 ASCII, UNICODE, UTF-8 등이 있음)을 사용해야 한다.

 

다음은 악의적인 사용자가 FORM에 장난을 함으로써 보안의 약점을 일으킬 수 있는 것들이다.

SQL 삽입 ❗️ 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안약점
✅ 입력 데이터에 SQL 예약어 및 특수문자가 입력되지 않게 필터링을 설정하여 해결
크로스사이트스크립트(XSS) ❗️ 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나 비정상적 기능 수행을 유발하는 보안약점
✅ HTML태그의 사용을 제한하거나 <, >, & 등의 문자가 삽입되지 않도록 Backend에서 다른 문자로 치환
위험한 형식 파일 업로드 ❗️ 악의적인 스크립트를 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안약점
✅ 확장자 제한(구현되어 있는 언어 피하기), 파일명암호화, 웹사이트와 서버 경로분리, 실행속성 제거
경로조작 및 자원삽입 ❗️ 데이터 입출력 경로를 조작하여 서버자원을 수정/삭제할 수 있는 보안약점
✅ /, \ 등의 문자로 경로순회공격을 못하도록 필터적용
운영체제 명령어 삽입 ❗️ 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안약점
✅ 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 시스템에서는 외부입력값에 대해 검증절차 부여
신뢰하지 않는 URL 주소로 자동접속 연결 ❗️ 사이트 주소를 입력값으로 받는 경우, 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안약점
✅ 연결되는 외부 사이트의 주소를 "화이트 리스트"로 관리함으로써 방지
728x90
반응형