데이터 삽입에 대한 흐름
-> 사용자 입력 -(Injection 가능)-> CRUD 처리 -> 저장 -> 결과 display
입력된 데이터에 대한 유효성 검증(validation)을 하지 않을 경우
공격자가 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안 약점
이 과정에서 sql 삽입을 하여 데이터를 위변조할 수 있음
클라이언트에서 예외처리를 하더라도 무의미해짐
-> 서버 또한 예외처리를 해야함
sql 삽입 예)
select * from user where id='$id' and pwd='$pwd'
select * from user where id='' or ''=' and pwd='' or ''='
where 절 이하를 참이 되도록 조작하여 데이터베이스에 침입할 수 있게 된다.
위와 같은 삽입 공격의 경우 '
(홑따옴표) 입력을 방지하여 해결할 수 있다.
이는 공격자가 시도하기 쉬운 삽입공격이다.
시큐어 코딩이 되었는지 안 되었는지를 판단할 수 있는 첫 관문인 셈이다.
더블인코딩
' : %27
% : 25
'
를 처리하기 위해선 %27, 2527
둘 다 처리해야 한다
『소프트웨어 개발보안 가이드』, 행정안전부, 한국인터넷진흥원, 2021.