0Pricing
Cyber Security Academy · 강의

SQL 삽입 방어

삽입 공격을 방지합니다

SQL 삽입 방어은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

SQL 삽입이란

SQL 삽입(SQLi)은 신뢰할 수 없는 사용자 입력이 SQL 쿼리에 직접 이어 붙을 때 발생합니다. 공격자는 애플리케이션이 일반 데이터로 처리해야 하는 필드에 SQL 구문을 몰래 삽입하여 쿼리의 의미를 변경합니다.

SQL 삽입은 전체 데이터베이스를 유출하거나 로그인을 우회하거나 데이터를 파괴할 수 있기 때문에 여전히 가장 큰 피해를 일으키는 웹 취약점 중 하나입니다.

취약한 쿼리

가장 흔한 실수는 문자열을 이어 붙이는 것입니다. 입력이 tom이면 쿼리가 정상적으로 작동하지만, 조작된 입력은 논리를 다시 작성합니다.

  • 작은따옴표가 문자열을 일찍 닫습니다.
  • 그 뒤의 모든 내용이 실행 가능한 SQL이 됩니다.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'

인증 우회

로그인 양식은 주요 표적입니다. 항상 참인 조건을 삽입하고 나머지를 주석 처리하면 공격자는 비밀번호 없이 로그인할 수 있습니다.

-- 시퀀스가 나머지 절을 주석 처리하므로 비밀번호 확인이 무시됩니다.

-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'

매개변수화된 쿼리

가장 중요한 방어 수단은 매개변수화된 쿼리(준비된 문)입니다. SQL 구조는 데이터와 별도로 전송되므로 입력은 항상 코드가 아닌 값으로 처리됩니다.

데이터베이스 드라이버는 ? 자리 표시자를 제공된 값에 안전하게 연결합니다.

-- Python (sqlite3 / psycopg)
cur.execute(
  'SELECT * FROM users WHERE name = ? AND pass = ?',
  (username, password)
)

Java의 준비된 문

모든 주요 프로그래밍 언어는 매개변수화를 지원합니다. Java에서는 Statement로 문자열을 만드는 대신 PreparedStatement를 사용하십시오.

연결된 매개변수는 자신의 자리를 벗어날 수 없으므로 여기서는 구조적으로 삽입 공격이 불가능합니다.

PreparedStatement ps = conn.prepareStatement(
  "SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();

저장 프로시저

저장 프로시저는 내부에서 매개변수화된 입력을 사용할 때 도움이 될 수 있습니다. 하지만 문자열을 이어 붙여 동적 SQL을 만드는 저장 프로시저는 똑같이 취약하다는 점에 주의하십시오.

  • 안전함: 프로시저에 전달되는 매개변수
  • 안전하지 않음: 프로시저 내부에서 문자열을 이어 붙여 실행하는 EXEC()

입력 검증 및 허용 목록 사용

검증은 유용한 두 번째 방어 계층입니다. 잘못된 문자를 차단하려고 하는 차단 목록보다 허용 목록(알려진 안전한 패턴만 허용)을 사용하십시오.

예를 들어 숫자 ID 필드는 쿼리에 전달되기 전에 숫자가 아닌 모든 값을 거부해야 합니다.

if not user_id.isdigit():
    raise ValueError('invalid id')
# only then use the value

이스케이프는 최후의 수단

따옴표를 수동으로 이스케이프하는 것은 취약하고 오류가 발생하기 쉽습니다. 데이터베이스마다 이스케이프 규칙이 다르며, 인코딩 기법이나 2차 삽입과 같은 예외 상황이 방어를 빠져나갈 수 있습니다.

매개변수화된 쿼리를 우선 사용하십시오. ORM이나 드라이버가 특정 식별자를 매개변수화할 수 없을 때만 이스케이프를 사용하십시오.

데이터베이스 계정에 최소 권한 적용

애플리케이션의 데이터베이스 사용자에게 최소 권한을 적용하여 삽입 공격이 성공하더라도 피해를 제한하십시오.

  • 필요한 테이블에 대해 SELECT, INSERT, UPDATE 권한만 부여하십시오.
  • 애플리케이션에 슈퍼 사용자/root 계정을 절대 사용하지 마십시오.
  • DROP, FILE 및 관리자 권한을 거부하십시오.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';

ORM 및 쿼리 빌더

최신 ORM(Hibernate, Sequelize, Django ORM, SQLAlchemy)은 기본적으로 매개변수화를 적용하므로 삽입 공격 위험을 대부분 제거합니다.

개발자가 원시 SQL로 전환하거나 쿼리 빌더에서 문자열 보간을 사용하면 위험이 다시 발생합니다. 원시 모드에서도 항상 값을 연결된 매개변수로 전달하십시오.

다층 방어

단일 방어 수단만으로는 충분하지 않습니다. 다음 계층을 결합하십시오.

  • 모든 곳에서 매개변수화된 쿼리 사용(주요 방어 수단)
  • 입력 검증 및 허용 목록 사용
  • 최소 권한 데이터베이스 계정
  • 알려진 패턴을 탐지하는 웹 애플리케이션 방화벽(WAF)
  • SQL이나 스택 추적을 절대 노출하지 않는 오류 처리

빠른 확인

주요 방어 수단에 대한 이해도를 확인하십시오.

요약

SQL 삽입이 어떻게 작동하고 이를 막는 방법을 배웠습니다.

  • SQLi는 신뢰할 수 없는 입력을 쿼리에 이어 붙일 때 발생합니다.
  • 매개변수화된 쿼리가 주요 방어 수단입니다.
  • 허용 목록 검증, 최소 권한 데이터베이스 계정 및 WAF를 추가하십시오.
  • 수동 이스케이프와 저장 프로시저 내부의 동적 SQL을 피하십시오.

다층 방어를 적용하면 한 번의 실수가 침해로 이어지는 것을 막을 수 있습니다.

자주 묻는 질문

“SQL 삽입 방어” 강의는 무료인가요?

네 — “SQL 삽입 방어” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“SQL 삽입 방어”에서 뭘 배우나요?

삽입 공격을 방지합니다 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“SQL 삽입 방어” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. SQL 삽입 방어
  2. 접근 제어와 암호화
  3. 감사와 모니터링
  4. 백업 및 복구 보안
← Cyber Security Academy(으)로 돌아가기