SQL injection (+ Mybatis 방어)

2021. 5. 4. 14:20·WEB/DB

SQL INJECTION

 

SQL Injection 이란,

  • SQL Injection 은 웹 애플리케이션에서 데이터의 유효성 검증을 하지 않아, 개발자가 의도하지 않은 동적 쿼리(Dynamic Query)를 생성하여  조작된 SQL문으로 DB 정보를 열람하거나 변경할 수 있는 보안 취약점입니다.
  • 예시
    • SELECT * FROM userInfo Where userID = '${userID}' and userPW = '${userPW}' 라는 쿼리가 있다
    • 정보를 빼내려는 유저가 pw' or 1=1 limit 1-- 를 비밀번호로 입력하면
    • 쿼리가 SELECT * FROM userInfo Where userID = 'admin' and userPW = 'pw' or 1=1 limit 1--' 이며
    • 잘못된 결과가 실행된다
    • 마지막에 '는 주석 처리되며, 1=1이 absolutely true로 만들어 주기 때문이다.
    • 홈페이지 쿼리에 따라 SQL Injection으로 충분히 해킹될 가능성이 있다!!

 


 

Spring framework에서 mybatis를 사용하고 있을 경우 방어하기!

 

  • Mybatis에서는 #{} 또는 ${} 두 가지 형식으로 파라미터를 받는다.
  • #{} : 내부적으로 PreparedStatement를 사용하기 때문에 sql injection 공격에 안전하다. 쿼리와 입력값 분리한다 (문자열 형태로 들어와서 파라미터 형태가 됨)
  • ( PreparedStatement : 값을 바인딩하는 시점에서 전달된 특수문자 쿼리 등을 필터링하여 sql injection을 막는다.)
  • ${} : 파라미터가 바로 출력된다 > SQL Injection 공격에 취약

 

>>> ${} 대신 #{}로 파라미터를 받는 것이 안전!

 

 

 

 

참고 사이트

https://sas-study.tistory.com/96

http://blog.plura.io/?p=6056 

 

'WEB > DB' 카테고리의 다른 글

MariaDB 설치 + workbench 연결 for MAC  (0) 2022.03.26
Mysql 서버 타임존 변경하기  (4) 2021.02.16
'WEB/DB' 카테고리의 다른 글
  • MariaDB 설치 + workbench 연결 for MAC
  • Mysql 서버 타임존 변경하기
HBean_
HBean_
백엔드 개발자의 개발 로그 💻
  • HBean_
    개발_log
    HBean_
  • 전체
    오늘
    어제
    • 전체 (103)
      • WEB (49)
        • Spring (14)
        • AWS EC2 (6)
        • DB (3)
        • 2020_webCamp (25)
        • JPA (1)
      • Devops (2)
      • 보안 (4)
      • Git (6)
      • JAVA (13)
      • 자료구조 (2)
      • 알고리즘 (11)
      • 네트워크 (2)
      • SStudy (2)
      • 실전프로젝트2 (4)
      • 개발 일기 (1)
      • 개발툴 (4)
      • Intellij (2)
      • 이슈 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    IntelliJ
    플러그인
    톰캣
    인텔리제이
    웹
    tomcat
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
HBean_
SQL injection (+ Mybatis 방어)
상단으로

티스토리툴바