데이터베이스와 연동된 웹 어플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우,
공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안약점을 말한다.
취약한 웹 어플리케이션에서는 사용자로부터 입력된 값을 필터링 과정없이 넘겨받아 동적 쿼리를 생성한다.
이는 개발자가 의도하지 않은 쿼리가 생성되어 정보유출에 악용될 수 있다.
📌 안전한 코딩기법
- 외부 입력이나 외부 변수로부터 받은 값이 직접 SQL 함수의 인자로 전달되거나, 문자열 복사를 통하여 전달되는 것은 위험하다. 그러므로 인자화된 질의문을 사용해야 한다.
- 외부 입력값을 그대로 사용해야 하는 환경이라면, 입력받은 값을 필터링을 통해 처리한 후 사용해야 한다. 필터링은 SQL문에서 사용하는 단어 사용 금지, 특수문자 사용금지, 길이 제한의 기준을 적용한다.
📌 예제
#include <stdlib.h>
#include <sql.h>
void Sql_process(SQLHSTMT sqlh)
{
char *query = getenv("query_string");
SQLExecDirect(sqlh, query, SQL_NTS);
}
위 코드를 살펴보자.
외부 입력이 SQL 질의어에 어떠한 처리도 없이 삽입되었기 때문에, name' OR 'a'='a 와 같은 문자열을 입력으로 주면
WHERE 절이 항상 참이 된다.
#include <sql.h>
void Sql_process(SQLHSTMT sqlh)
{
char *query_items = "SELECT * FROM items";
SQLExecDirect(sqlh, query_items, SQL_NTS);
}
위 코드는 인자화된 질의를 사용해 질의 구조의 변경을 막을 수 있다.
'IT' 카테고리의 다른 글
[IT] 크로스사이트 스크립트 (0) | 2025.04.01 |
---|---|
[IT] 자원 삽입 ( Resource Injection ) (0) | 2025.04.01 |
[IT] 레이턴시 ( Latency ) (2) | 2024.10.24 |
[IT] 빅 엔디안, 리틀 엔디안 ( 바이트 저장 순서 ) (1) | 2024.10.21 |
[IT] 객체 지향 설계 원칙 - S.O.L.I.D (1) | 2024.10.20 |