TOOLS

[MySQL] SQL 인젝션이란? 공격방어방법

멱군 2023. 10. 24. 17:54

데이터베이스와 웹 애플리케이션의 보안에서 중요한 주제인 SQL 인젝션에 대해 알아보겠습니다. SQL 인젝션은 공격자가 데이터베이스 쿼리에 악의적인 코드를 삽입하여 원하지 않는 동작을 일으키는 보안 공격 방법 중 하나입니다. 이 글에서는 SQL 인젝션의 원리와 그로 인한 위협, 그리고 이를 방어하는 전략에 대해 알아보도록 하겠습니다.

 

 

1. SQL 인젝션의 원리

SQL 인젝션은 사용자 입력값을 필터링 없이 SQL 쿼리에 직접 삽입할 때 발생합니다. 공격자는 이러한 취약점을 이용하여 악의적인 쿼리를 실행시킬 수 있습니다.

예를 들어, 로그인 폼에서 아이디와 비밀번호를 입력받아 다음과 같은 쿼리를 생성한다고 가정해봅시다.

SELECT * FROM users WHERE username = '[입력한 아이디]' AND password = '[입력한 비밀번호]';

공격자가 아이디 필드에 `admin'--` 라고 입력하면 쿼리는 다음과 같이 변합니다.

SELECT * FROM users WHERE username = 'admin' --' AND password = '[입력한 비밀번호]';

`--`는 SQL에서 주석을 의미하므로, 비밀번호 검사 부분이 주석 처리되어 공격자는 비밀번호 없이 로그인할 수 있게 됩니다.

 

2. SQL 인젝션의 위협

SQL 인젝션을 통해 공격자는 다음과 같은 행위를 할 수 있습니다

  • 데이터베이스 내의 중요한 정보 조회
  • 데이터의 수정, 삭제
  • 관리자 권한 획득
  • 데이터베이스 서버에 직접 명령 실행

이로 인해 데이터베이스의 중요 정보 유출, 서비스의 중단 등 큰 피해를 입을 수 있습니다.

 

3. 공격방어방법

SQL 인젝션을 방어하려면 어떻게 해야 할까요?

입력 값 검증

사용자로부터 입력 받은 모든 데이터는 검증 과정을 거쳐야 합니다.

파라미터화된 쿼리 사용

쿼리에 직접 값을 삽입하는 대신 파라미터를 사용하면 SQL 인젝션을 방지할 수 있습니다.

최소 권한 원칙

데이터베이스 계정은 최소한의 권한만 가져야 합니다.

에러 메시지 숨기기

데이터베이스 에러 메시지는 공격자에게 유용한 정보를 제공할 수 있으므로 사용자에게 노출되지 않도록 해야 합니다.

 

결론

SQL 인젝션은 웹 애플리케이션의 주요 보안 위협 중 하나입니다. 따라서 개발자는 SQL 인젝션의 원리와 방어 전략을 잘 이해해야 합니다. 특수문자 미처리로 인한 공격도 조심해야 하구요.

웹은 언제 어디서 누구나 접속 할 수 있기 때문에 특히 보안을 위한 노력이 가장 중요할거 같아요. 데이터의 신뢰성은 보안으로부터 시작된다 해도 과언이 아닐것 같습니다.