[데이터베이스] SQL Injection

2023. 7. 18. 11:38·CS 지식/[데이터베이스]

해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법

공격 방법

1) 인증 우회

  • 보통 로그인을 할 때 아래와 같은 쿼리로 전송될 것
SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";
  • SQL Injection으로 공격할 때, input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것
1234; DELETE * USER FROM ID = "1";
  • 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 일치해서 True가 되고 뒤에 작성한 DELETE 문도 데이터베이스에 영향을 줄 수도 있게 되는 피명적인 상황
  • 이 밖에도 기본 쿼리문의 WHERE 절에 OR문을 추가하여 '1' = '1'과 같은 true문을 작성하여 무조건 적용되도록 수정한 뒤 DB를 마음대로 조작할 수도 있음

2) 데이터 노출

  • 시스템에서 발생하는 에러 메시지를 이용해 공격하는 방법
  • 보통 에러는 개발자가 버그를 수정하는 면에서 도움을 받을 수 있는 존재
  • 해커들은 이를 역이용해 악의적인 구문을 삽입하여 에러를 유발시킴
  • 즉, 해커는 GET 방식으로 동작하는 URL 쿼리 스트링을 추가하여 에러를 발생시킴

방어 방법

1) input 값을 받을 때, 특수 문자 여부 검사하기

  • 로그인 전, 검증 로직을 추가하여 미리 설정한 특수 문자들이 들어왔을 때 요청을 막아냄

2) SQL 서버 오류 발생 시, 해당하는 에러 메시지 감추기

  • view를 활용하여 원본 데이터베이스 테이블에는 접근 권한을 높임
  • 일반 사용자는 view로만 접근하여 에러를 볼 수 없도록 만듦

3) preparestatement 사용하기

  • preparestatement를 사용하면, 특수문자를 자동으로 escaping 해줌
  • 이를 활용해 서버 측에서 필터링 과정을 통해서 공격을 방어함
저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [데이터베이스]' 카테고리의 다른 글

[데이터베이스] 인덱스(Index)  (0) 2023.07.18
[데이터베이스] 이상(Anomaly)  (0) 2023.07.18
[데이터베이스] SQL과 NOSQL의 차이  (0) 2023.07.18
[데이터베이스] JOIN  (1) 2023.07.17
[데이터베이스] Key  (0) 2023.07.17
'CS 지식/[데이터베이스]' 카테고리의 다른 글
  • [데이터베이스] 이상(Anomaly)
  • [데이터베이스] SQL과 NOSQL의 차이
  • [데이터베이스] JOIN
  • [데이터베이스] Key
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    CS지식
    Java
    스프링부트
    spring
    스프링 부트 쇼핑몰 프로젝트 with JPA
    pcce 기출문제
    리눅스마스터
    JPA
    Spring Security
    리눅스마스터 1급
    CS
    스프링
    python
    backjoon
    programmers
    postgresql
    springboot
    Linux
    자바
    baekjoon
    백준
    플러터
    데이터베이스
    데이터
    Flutter
    Oracle
    시큐리티
    DB
    프로그래머스
    리눅스
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[데이터베이스] SQL Injection
상단으로

티스토리툴바