입력값 검증 (Input Validation)

정보보안학
한 줄 정의: 사용자나 외부 시스템으로부터 들어오는 데이터가 예상된 형식과 범위를 벗어나지 않는지 프로그램이 처리하기 전에 확인하는 보안 절차입니다.

쉽게 풀면

공항 보안검색대에서 승객의 짐을 x-ray로 확인해 위험물이 있는지 점검하는 것과 비슷합니다. 웹사이트나 프로그램은 사용자가 입력한 이름, 이메일, 검색어 등을 그대로 믿고 처리하면 위험할 수 있어, 먼저 그 값이 형식에 맞는지, 길이가 적절한지, 허용되지 않는 특수문자나 명령어가 섞여 있지 않은지를 검사합니다. 이 검증 절차를 제대로 하지 않으면 공격자가 조작된 입력값을 이용해 시스템을 오작동시키거나 원치 않는 명령을 실행시킬 수 있습니다.

왜 중요한가

SQL 인젝션, 크로스 사이트 스크립팅 등 웹 애플리케이션 보안에서 다루는 다수의 주요 취약점이 부적절한 입력값 검증에서 비롯되기 때문에, 이는 웹 보안의 가장 기초적이면서도 중요한 방어선으로 연구됩니다. 안전한 소프트웨어 개발 방법론이나 보안 코딩 가이드라인에서도 핵심 항목으로 다루어집니다.

논문에서는 이렇게 쓰입니다

"본 연구는 웹 애플리케이션의 입력값 검증(input validation) 미흡으로 발생하는 SQL 인젝션 취약점의 패턴을 정적 분석 기법으로 탐지하는 방법을 제안한다."

코드를 실행하지 않고도 입력값 검증이 부족한 부분을 자동으로 찾아내는 연구 방법을 다룬 사례입니다.

"클라이언트 측 입력값 검증만으로는 우회가 가능함을 실험을 통해 확인하고, 서버 측 검증의 필요성을 강조하였다."

사용자 화면에서 이루어지는 검증만으로는 충분하지 않으며 서버에서도 반드시 재검증이 필요하다는 점을 보여주는 연구입니다.

조금 더 깊게 보면

입력값 검증은 허용된 값의 목록만 통과시키는 화이트리스트 방식과, 알려진 위험 패턴을 걸러내는 블랙리스트 방식으로 나눌 수 있으며, 일반적으로 화이트리스트 방식이 더 안전한 접근으로 여겨집니다. 또한 검증은 사용자 화면(클라이언트)뿐 아니라 서버 쪽에서도 반드시 수행되어야 하며, 데이터의 형식, 길이, 범위, 유형을 종합적으로 검사하는 것이 일반적인 원칙으로 연구됩니다.

주의할 점

클라이언트 측에서만 이루어지는 검증은 사용자가 브라우저 개발자 도구 등으로 손쉽게 우회할 수 있으므로 보안 목적의 검증으로는 신뢰할 수 없습니다. 서버 측 검증이 반드시 병행되어야 실질적인 보호 효과를 기대할 수 있습니다.

관련 용어