✅ SQL Injection이란?
SQL Injection은 웹 애플리케이션이 사용자 입력을 제대로 필터링하지 않고 데이터베이스 쿼리에 넣을 때 발생하는 보안 취약점이다.
쉽게 말하면, 사용자가 입력하는 값에 악의적인 SQL 문장을 심어서 서버가 의도하지 않은 명령을 수행하게 만드는 공격이다.
요약하면:
"입력값으로 SQL 쿼리를 조작한다."
✅ 어떻게 작동할까?
예를 들어, 로그인 폼이 있다고 가정
SELECT * FROM users WHERE username = '입력한아이디' AND password = '입력한비밀번호';
여기서 아이디 입력
admin' --
SQL 문장은 이렇게 변합니다
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '비밀번호';
--는 SQL에서 "주석"을 뜻하기 때문에, 뒤에 오는 비밀번호 검증 부분이 무시됨.
결과적으로 비밀번호를 몰라도 로그인 가능.
✅ SQL Injection으로 할 수 있는 것들
- 비밀번호 없이 로그인
- 다른 사용자 계정 탈취
- 데이터베이스의 모든 정보 조회
- 데이터 수정/삭제
- 심한 경우, 서버 시스템 명령어 실행까지 가능
✅실습 예시
로그인 우회 입력값 예시:
' OR '1'='1
데이터 탈취 입력값 예시 (Union 기반):
' UNION SELECT username, password FROM users --
시간 지연을 이용한 Blind SQL Injection 예시:
' OR IF(1=1, SLEEP(5), 0) --
(응답이 느려지면 Injection 성공)
✅ 어떻게 막을까? (방어법)
Prepared Statements (Prepared SQL) 사용
- SQL 문장을 고정하고, 값만 바인딩해서 넣기
- ORM 사용하기
- 예: JPA, Hibernate, Django ORM 등
- 입력값 필터링
- 특수문자( ', ", ;, -- 등) 제거하거나 이스케이프 처리
- 최소 권한 원칙 적용하기
- DB 계정에 꼭 필요한 권한만 부여
- 에러 메시지 감추기
- 사용자에게 SQL 에러 메시지를 노출하지 않기
'기록' 카테고리의 다른 글
[시큐어 코딩] XSS와 CSRF (3) | 2025.04.30 |
---|---|
[시큐어 코딩] SSRF(Server-Side Request Forgery) 서버사이드 요청위조 (1) | 2025.04.29 |
ChatGPT 챗지피티 이용한 지브리 이미지 생성(무료가능, 모바일 가능) (6) | 2025.04.03 |
Asterisk 설정하기 (1) | 2024.11.01 |
nohup : 백그라운드 프로세스 유지 (0) | 2024.08.21 |