← 질문 목록
#256깊이 0

SQL 인젝션은 무엇으로 막는가?

인프라 · 보안기초보안 공격

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

기본은 prepared statement의 값 바인딩이다. SQL 문법을 먼저 고정하고 입력은 별도 값으로 전달한다. 입력에 따옴표나 연산자가 있어도 문법으로 해석되지 않는다.

입력 위치처리 방법이유
이름·나이 같은 값placeholder에 바인딩끝까지 값으로 다룬다
열·표 이름코드의 허용 목록에서 매핑보통 값으로 바인딩할 수 없다
정렬 방향정해 둔 enum에서 선택임의 문법 조각을 받지 않는다

이스케이프나 금지 문자 목록을 주 방어로 삼지 않는다. 데이터베이스·문자 인코딩·문맥마다 규칙이 달라 빠뜨리기 쉽다. 입력 검증은 업무 형식을 지키는 보조 수단이지 값 바인딩의 대체가 아니다.

ORM을 쓴다고 자동으로 안전해지지는 않는다. ORM의 파라미터 API는 안전하지만 raw query에 문자열을 합치면 같은 취약점이 생긴다. 저장 프로시저도 내부에서 동적 SQL을 이어 붙이면 위험하다.

저장할 때 문제가 없던 문자열도 나중에 다른 질의에 이어 붙이면 공격이 된다. 데이터베이스에서 읽은 값도 다시 SQL에 넣을 때는 바인딩한다.

최소 권한은 피해를 줄이는 두 번째 방어선이다. 앱 계정에서 스키마 변경 권한을 빼고 읽기·쓰기가 다르면 계정을 나눈다. 권한을 줄였다고 인젝션 자체가 막히는 것은 아니다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

SQL 인젝션은 무엇으로 막는가?