← 질문 목록
#274깊이 0
SQL 인젝션은 무엇으로 막는가?
질의문과 값을 갈라 두면 막힌다. 값을 문자열로 이어 붙이는 순간 값이 문법이 될 수 있다.
| 기준 | 이어 붙이기 | 값 바인딩 |
|---|---|---|
| 값의 신분 | 질의문의 일부가 된다 | 끝까지 값이다 |
| 막는 방법 | 위험한 글자를 지운다 | 문법 자리에 못 들어간다 |
| 새는 곳 | 인코딩·숫자 자리 | 틀을 동적으로 만들 때 |
이스케이프로 막으려는 시도가 흔한데 새는 자리가 계속 나온다. 문자 인코딩이 다르거나 숫자 자리에는 따옴표가 없어서다.
틀을 동적으로 만들어야 할 때가 남는다. 정렬 기준이나 표 이름은 값 자리가 될 수 없다. 그때는 허용 목록으로 고른다.
권한도 함께 줄인다. 앱 계정에 DROP이 없으면 뚫려도 잃는 것이 적다.