[SQL Injection] SQL Injection이란?
1. SQL이란?
SQL은 Structured Query Language의 약자로 구조화된 질의어이다. 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. SQL은 데이터베이스로부터 정보를 얻거나 갱신하기 위한 표준 대화식 프로그래밍 언어이다.
SQL의 종류
DDL(Data Definition Language) – 데이터 정의 언어
• SCHEMA, DOMAIN, TABLE를 정의하거나 변경 또는 삭제할 때 사용하는 언어
• 데이터 정의 언어의 3가지 유형
명령어 |
특징 |
CREATE |
SCHEMA, DOMAIN, TABLE을 생성 |
ALTER |
SCHEMA, DOMAIN, TABLE의 속성을 변경 |
DROP |
SCHEMA, DOMAIN, TABLE을 삭제 |
DML(Date Manipulation Language) – 데이터 조작 언어
• TABLE내의 데이터를 제어할 때 사용되는 언어
• 데이터 조작 언어의 4가지 유형
명령어 |
특징 |
SELECT |
테이블에서 조건에 맞는 열을 검색 |
INSERT |
테이블에 새로운 열을 삽입 |
DELETE |
테이블에서 조건에 맞는 열을 삭제 |
UPDATE |
테이블의 조건에 맞는 열을 수정 |
DCL(Data Control Language) – 데이터 제어 언어
• 데이터의 보안, 무결성, 백업등 제어할 때 사용되는 언어
• 데이터 제어 언어의 종류
명령어 |
특징 |
COMMIT |
명령어가 성공적으로 수행됨을 선언 |
ROLLBACK |
명령어의 수행이 실패하였음을 알리고, 이전 상태로 되돌린다. |
GRANT |
사용자에게 사용권한을 부여 |
REVOKE |
사용자에게 사용권한을 취소 |
2. SQL Injection이란?
Injection의 사전적 의미는 “주입” “주사”라는 뜻을 가진다.
즉, SQL Injection은 SQL을 웹 어플리케이션에 주입한다는 의미이다.
여기서 기술적인 의미로는 웹 어플리케이션이 사용자의 입력에 대해 충분한 검증을 가지지 못해, 악의적으로 입력된 SQL문이 데이터베이스에서 실행되게 하는 공격방법이다.
SQL Injection은 OWASP(국제웹보안표준기구)에서 2010년과 2013년에 발표한 웹 취약점 문제에 대한 OWASP TOP 10에서 “A1”으로 뽑힐 정도로 보안의 큰 위험을 주는 공격방법이다.