ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL injection
    study/DB 2020. 9. 25. 19:16
    반응형

     

    Icons made by iconixar from www.flaticon.com/authors/iconixar

     

     

    개발을 하면서 보안 이슈에도 관심을 가지게 되는데, 가장 먼저 눈에 들어온것은 SQL injection 이었다.

    RDBMS를 이용해서 서버와 클라이언트의 데이터를 주고 받을 때, 클라이언트에서 바로 서버로 넘어가면 문제가 생길수 있다. 예를 들면 아래와 같다.

     

    간단한 회원가입 서비스가 있다고 할때, 쿼리문은 다음과 같을 것이다.

    INSERT INTO USER (이름) VALUES (이름);
    

     

    일반적인 사용자라면, 이름과 정보들을 제대로 입력하겠지만,

    이름'); DROP TABLE USER;-- //--는 뒤에 오는 내용을 주석처리한다

    위의 값을 집어넣어버리면 고객 데이터가 전부 날아가버리는 참사가 발생할수도 있다.

     

     

    또는 로그인 폼에서 아이디값에 admin'-- 처럼 입력하여

    SELECT * FROM members WHERE username = 'admin'--' AND password = 'password' 

    비밀번호 없이 로그인을 시도하거나 password칸에 ' or 1=1-- 처럼 입력하여 무조건 true를 반환해낼수도 있다.

     

    이렇게 정보를 빼내거나 지워버리는 것 말고도 딜레이를 줘서 시간지연 공격도 할수 있는등 다양한 공격방법이 있다.(...) 

     

    이러한 공격에 대비하기 위해선 첫째로 클라이언트에 넘어온값을 바로 넘기면 안된다.

    prepared statement를 사용해야 되는데, data와 query를 분리해서 준비한다음 실행하고, 입력값은 무조건 데이터로 분리되기 때문에 사용자 측에서 쿼리를 입력해 공격을 시도해도 실행되지 않는것이다.

     

    처음 진행한 프로젝트부터 prepared statement를 써서 개발했기 때문에 몰랐지만, 기본적이면서도 중요한 내용같다.

     

    참고한 포스트 :

    www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/

     

     

     

    반응형

    댓글

Designed by Tistory.