1. SQL Injection 이란?

  sql injection 이란 해커가 애플리케이션의 db에 악의적인 의도를 가지고 공격자가 원하는 sql query가 실행되도록 하는 흔한 공격 방법이다. 주로 유저로부터 받은 데이터를 필터링, 이스케이핑 하지 못했을 때 발생한다. 때문에 개발자는 기본적으로 유저로부터 받은 인풋 값을
신뢰하지 않아야 한다.


2.  SQL Injection 공격의 종류

  2 - 1) 인증 우회
    보통 유저 인증을 위한 로그인 페이지에서 주로 행해진다. sql query에 논리적 연산 오류를 이용해서 로그인 인증 쿼리문이 무조건
    true 값이 나오도록 하여 인증을 무력화 시키는 원리다.
    ex) id 와 pw에 'or 1=1' 입력

  2 - 2) 데이터 노출
    타겟 시스템의 주요 데이터 탈취를 목적으로 행해지는 방식이다.
    시스템의 에러는 개발자에게 디버깅의 이로움을 주지만 오히려 해킹의 위험이 될 수도 있다.
    해커가 악의적인 sql query로 error를 유발시키고 그 error에서 단서를 얻어 더 위험한 공격을 감행할 수도 있다.
    그렇기 때문에 에러 페이지 또는 메세지가 노출되면 안된다.


3. 방어 방법

  3 - 1) 유저의 인풋을 필터링 및 이스케이핑 하자!
  3 - 2) sql 관련 에러 메세지를 유저에게 절대 보이지말자!
  3 - 3) 비밀번호의 경우 반드시 유저로부터 받은 데이터를 바로 저장하지말고 암호화해서 저장하자
  3 - 4) ORM을 사용해서 반드시 ORM에서 제공하는 api를 이용해서 sql query가 내부적으로 실행되도록 하자

'Backend > Database' 카테고리의 다른 글

정규화  (0) 2021.06.03
Transaction  (0) 2021.05.10

+ Recent posts