|
|
title 필드에:
아무거나'); DROP TABLE board; --쿼리가 다음과 같이 변형됨:
INSERT INTO board (title, content) VALUES ('아무거나'); DROP TABLE board; --', '내용')결과적으로 이 쿼리는:
정상적인 INSERT 시도 후
DROP TABLE board 명령이 실행되어 게시판 테이블이 삭제됩니다.
📌 글을 남기는 방식으로 악용하는 예
공격자는 다음과 같은 입력으로 임의의 글을 등록할 수도 있습니다.
제목: test'); INSERT INTO board (title, content) VALUES ('해킹', '이 사이트는 취약합니다'); --
변환된 쿼리:
INSERT INTO board (title, content) VALUES ('test'); INSERT INTO board (title, content) VALUES ('해킹', '이 사이트는 취약합니다'); --', '본문')
이 경우 실제로 공격자가 원하는 글이 추가로 게시판에 삽입됩니다.
🔐 방어 방법 (중요!)
Prepared Statement (Prepared SQL 문) 사용
ORM (예: Django ORM, SQLAlchemy) 활용
사용자 입력을 반드시 이스케이프 처리
입력 값 검증 (예: 길이, 형식)
DB 권한 최소화 (글만 쓸 수 있는 계정 따로 설정)
✅ 결론
SQL 인젝션은 사용자의 입력을 그대로 SQL 쿼리에 넣는 방식이 문제가 되어, 공격자가 의도한 SQL 명령을 실행할 수 있도록 만듭니다. 이로 인해 데이터베이스에 글을 남기거나 삭제하거나 조작하는 것까지 가능해집니다.
필요하면 실제 시나리오나 실습 예제도 도와드릴 수 있어요.