다섯 살도 알 수 있게 · 보안
인젝션이 뭐예요?
인젝션(Injection — SQL 인젝션, XSS)을 손님 쪽지에 '그리고 금고도 열어' 를 끼워 쓰는 도둑 이야기로 풀어봤어요.
창구 직원은 손님 쪽지를 읽고 장부 담당에게 그대로 전해요.장부 담당은 쪽지에 적힌 대로 장부에 적어요. 사과 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 - 창구 수법 열 가지 목록. 도둑들이 창구에서 제일 많이 쓰는 수법 열 가지. 인젝션은 늘 윗줄이에요. → 도둑 백과사전
다음 이야기
홀려서 조종당하는 마을 사람들 →