웹 보안 취약점 중 XSS와 함께 가장 자주 언급되는 공격이 바로
SQL Injection (SQLi, SQL 인젝션) 입니다.
이번 글에서는 SQL Injection이 무엇인지,
어떻게 동작하는지, 그리고 이를 어떻게 방어할 수 있는지
쉽게 정리해보았습니다.
웹 애플리케이션이 사용자 입력값을 제대로 검증하지 않아,
DB 쿼리가 조작되는 보안 취약점
기본 쿼리 구조:
SELECT * FROM users WHERE username = '입력값' AND password = '입력값';
공격자가 입력한 값:
' OR 1=1 --
쿼리 전체가 이렇게 변함:
SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '';
결과:
조건이 항상 참이 되면서,
로그인 우회 또는 모든 사용자 정보 노출 가능
| 방법 | 설명 |
|---|---|
| 입력값 검증 | 숫자/문자 구분, 길이 제한 등 |
| Prepared Statement | 쿼리와 값 분리하여 SQL 주입 차단 |
| ORM 사용 | Django, SQLAlchemy 등 안전한 쿼리 생성 |
| 최소 권한 부여 | DB 계정에 불필요한 권한 제한 |
읽어주셔서 감사합니다 😊