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 |