SQL injection은 웹 애플리케이션의 보안 취약점을 악용하여 악의적인 SQL 쿼리를 데이터베이스에 전송하는 공격 기법이다.
이를 통해 공격자는 데이터베이스의 중요 정보를 탈취하거나 조작할 수 있다.
SQL Injection의 원리
공격자는 웹 애플리케이션의 사용자 입력 부분에 악의적인 SQL 쿼리를 삽입한다. 이 쿼리는 개발자가 의도하지 않은 방식으로
데이터베이스에 전달되어 실행된다. 예를 들어 로그인 페이지에서 다음과 같은 쿼리가 사용된다면,
SELECT * FROM users WHERE username='$username' AND password='$password'
공격자가 username에 'OR 1=1'을 입력하면 쿼리는 다음과 같이 변형된다.
SELECT * FROM users WHERE username='' OR '1'='1' AND password=''
1=1은 항상 참이므로 이 쿼리는 users 테이블의 모든 레코드를 반환하게 된다.
SQL Injection 방지 방법
- 사용자 입력값을 그대로 쿼리에 삽입하지 말고 입력값을 적절히 필터링하거나 이스케이프 처리한다.
- Prepared Statements를 사용하여 쿼리와 입력값을 분리한다.
- 최소한의 데이터베이스 권한만 부여하여 피해를 최소화한다