본문 바로가기
보안

SQL Injection

by ByteGuard 2025. 10. 28.

 

  • 정의: 사용자 입력 필드에 SQL 구문을 삽입하여, 웹 애플리케이션이 의도치 않은 SQL 쿼리를 데이터베이스에 실행하도록 유도하는 공격입니다.
  • 목표: 데이터베이스의 모든 정보(사용자 정보, 비밀번호, 기밀 자료 등)를 조회, 변경, 삭제하거나, 데이터베이스 서버에서 운영체제 명령을 실행할 수도 있습니다.

예시: 로그인 우회

 

공격자가 아이디 입력란에

' OR 1=1 --

 

를 입력합니다. 원래 쿼리:

SELECT * FROM users WHERE id = '사용자ID' AND password = '비밀번호'

OR 1=1은 항상 참이므로 모든 레코드를 반환하며, --는 그 뒤의 내용을 주석 처리하여 비밀번호 확인 과정을 무력화시킵니다. 결과적으로 유효한 비밀번호 없이 로그인에 성공합니다.

 

SQL Injection 방어 방법

  • Prepared Statement (Prepared Statement) 또는 Parameterized Query 사용:
    • 가장 효과적인 방법입니다. 쿼리 문과 사용자 입력 값(데이터)을 분리하여 처리하는 방식입니다. 데이터가 아무리 SQL 구문처럼 보여도 데이터로만 취급되므로, 공격자가 삽입한 SQL 명령이 실행되지 않습니다.
  • 입력 값 검증 및 최소화 (Input Validation & Least Privilege):
    • 사용자 입력 데이터의 유효성을 엄격하게 검사합니다 (예: 숫자는 숫자만 허용, 길이에 제한).
    • 웹 애플리케이션이 데이터베이스에 접속하는 계정의 권한을 최소화합니다. (예: SELECT만 필요한 경우 INSERT, DELETE 권한은 부여하지 않습니다).

'보안' 카테고리의 다른 글

Cross-Site Request Forgery (CSRF)  (0) 2025.10.27
Cross-Site Scripting (XSS)  (0) 2025.10.27
trivy config . 로 취약점 테스트 해보기  (0) 2025.06.20
iOS의 샌드박스  (1) 2025.06.18
일방향 해시함수 용어 정리  (0) 2025.05.02