다섯 살도 알 수 있게 · 보안

인젝션이 뭐예요?

인젝션(Injection — SQL 인젝션, XSS)을 손님 쪽지에 '그리고 금고도 열어' 를 끼워 쓰는 도둑 이야기로 풀어봤어요.

손님창구사과 3개 주세요장부장부 담당창구 직원은 쪽지를 그대로 전해요쪽지에 적힌 대로 장부에 적어요

창구 직원은 손님 쪽지를 읽고 장부 담당에게 그대로 전해요.장부 담당은 쪽지에 적힌 대로 장부에 적어요. 사과 3개, 하고요.

도둑사과 3개 주세요그리고 금고도 열어 줘창구금고가 열렸어요직원은 손님 말과 명령을 구분 못 해요쪽지에 끼워 넣은 한 줄이 금고를 열어요

도둑이 쪽지에 '그리고 금고도 열어 줘' 를 끼워 써요. 직원은 손님 말과 명령을 구분 못 해요.쪽지가 통째로 장부 담당에게 가요. 장부 담당은 적힌 대로 해요. 금고가 열려요.

손님인 척하는 도둑사과 3개 주세요그리고 금고도 열어 줘그리고 장부를 다 지워쪽지 = 손님 말 + 숨긴 명령다 손님 말이지?창구 직원인젝션 = 손님 쪽지에 숨겨 넣은 명령직원이 쪽지를 통째로 전하면 명령도 같이 가요

인젝션은 손님 쪽지에 숨겨 넣은 명령이에요.손님 말이 들어갈 자리에 명령을 끼워 넣어요. 직원이 쪽지를 통째로 전하면 명령도 같이 가요.

쪽지에 끼워 넣기손님 말 뒤에 명령 한 줄
장부를 노려요읽고, 바꾸고, 지워요
게시판에 붙이면다른 손님까지 속아요
직원은 구분 못 해요말과 명령이 같은 종이에
명령: 사과 ( )개 주기손님 말 칸3, 그리고 금고도 열어← 전부 그냥 글자예요손님 말은 손님 말 칸에만; ' <3이상한 글자는 걸러요사과 3개그리고 금고도…창구 앞 검토원칸 나누기 + 거르기 + 검토원제일 중요한 건 칸 나누기예요 — 나머지는 덤이에요

손님 말은 손님 말 칸에만 넣어요. 이상한 글자는 거르고, 창구 앞에 검토원을 세워요.칸이 나뉘어 있으면 손님 말 칸에 뭘 적어도 명령이 되지 않아요. 이게 제일 중요해요. 창구 앞 검토원은 덤이에요.

도둑창구명령: 사과 ( )개 주기손님 말 칸3, 그리고 금고도 열어← 전부 그냥 글자예요그런 개수는 없는데요?금고는 닫힌 채쪽지에 뭘 적어도 손님 말은 손님 말일 뿐이에요

이제 쪽지에 뭘 적어도 손님 말은 손님 말일 뿐이에요.금고는 닫힌 채예요. 잘 됐는지 고용한 도둑에게 쪽지 시험을 부탁해요. 새 구멍이 나오면 목수가 판자를 보내요.

한 줄로

인젝션 = 손님 쪽지에 숨겨 넣은 명령. 직원이 쪽지를 통째로 전하면 명령도 같이 가요. 막으려면 손님 말은 손님 말 칸에만.

Injection. 사용자 입력이 코드나 쿼리의 일부로 해석되는 취약점이에요. SQL 인젝션은 데이터베이스를, XSS 는 다른 사용자의 브라우저를 노려요. 파라미터화 쿼리와 출력 이스케이프가 핵심 방어예요.

어른들은 이렇게 불러요

SQL 인젝션
SQL injection
장부 담당에게 가는 쪽지에 숨긴 명령. 장부를 읽고, 바꾸고, 지워요. 장부는 데이터베이스예요.
XSS
XSS (cross-site scripting)
게시판에 붙인 쪽지. 도둑의 쪽지를 성이 게시판에 붙이면, 읽는 손님마다 명령을 따라요.
입력 검증
Input validation
쪽지 모양 확인. 사과 개수 칸엔 숫자만. 글자가 오면 돌려보내요.
파라미터화 쿼리
Parameterized query
손님 말은 손님 말 칸에만. 명령은 미리 인쇄, 손님 말은 빈칸에. 뭘 적어도 명령이 안 돼요. 제일 중요한 방어예요.
이스케이프
Escaping
이상한 글자에 표시하기. 따옴표나 꺾쇠를 '그냥 글자' 라고 표시해서 명령으로 안 읽히게 해요.
WAF
WAF
창구 앞 검토원. 수상한 쪽지를 창구 앞에서 걸러요. 덤이지, 칸 나누기를 대신하진 못해요. → 창구 앞 쪽지 검토원
시큐어 코딩
Secure coding
칸을 나눠서 창구 만들기. 처음부터 손님 말과 명령이 섞이지 않게 창구를 짓는 습관이에요.
OWASP Top 10
OWASP Top 10
창구 수법 열 가지 목록. 도둑들이 창구에서 제일 많이 쓰는 수법 열 가지. 인젝션은 늘 윗줄이에요. → 도둑 백과사전
다음 이야기
홀려서 조종당하는 마을 사람들 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →