SQL 인젝션


개요

공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안취약점




보안대책

  • 1. preparedStatement 클래스와 하위 메소드 executeQuery(), execute(), executeUpdate()를 사용하는 것이 바람직하다.
  • 2. preparedStatement 클래스를 사용할 수 없는 환경이라면, 입력값을 필터링 처리한 후 사용한다. 필터링 기준은 SQL구문 제한, 특수문자 제한, 길이제한을 복합적으로 사용한다.


코드예제

다음은 안전하지 않은 코드의 예를 나타낸 것으로, 외부로부터 tableName과 name의 값을 받아서 SQL쿼리를 생성하고 있으며, name의 값으로 name' OR 'a'='a를 입력하면 조작된 쿼리문 전달이 가능한 형태의 코딩


외부로부터 인자를 받는 preparedStatement 객체를 상수 스트링으로 생성하고, 인자 부분을 setXXX 메소드로 설정하여, 외부의 입력이 쿼리문의 구조를 바꾸는 것을 방지하는 코딩




참고문헌 및 이미지 출처

행정안전부, 한국인터넷진흥원 - 홈페이지 SW(웹) 개발보안 가이드

행정자치부, 한국인터넷진흥원 - 전자정부SW개발운영자를 위한 JAVA 시큐어코딩 가이드

'보안, 시큐어코딩' 카테고리의 다른 글

랜섬웨어 예방  (0) 2018.12.17
CSRF 사이트 간 요청 위조  (0) 2018.12.17
XSS 크로스 사이트 스크립팅  (0) 2018.12.17

+ Recent posts