해커에 의해 조작된 sql쿼리문이 데이터베이스에 그대로 전달되어서 비정상적인 명령을 실행시키는 공격 기법
Authentication 이후 Authorized되어야 하는데, Unauthorized임에도 Authorized하게 하는 방식
SELECT *
FROM USER
WHERE ID = "ABC" AND PASSWORD = "1234";
'1' = '1'
과 같은 true문을 작성하여 무조건 적용되도록 수정한 뒤 DB를 마음대로 조작)-- 1)
1234; DELETE * FROM USER WHERE ID = "1"; // 모든 db 내용 삭제
-- 2)
-- 입력값
UserID: admin'--
Password: 아무거나
-- 실행쿼리문
Select * From Users Where UserID = 'admin'-- And Password = '아무거나'
// admin이라는 계정이 있을 시 pswd를 몰라도 통과
--3)
-- 입력값
UserID: test
Password: 1234' or '1'='1
-- 실행쿼리문
Select * From Users Where UserID = 'test' And Password='1234' or '1'='1'
// test 계정이 없어도 true처리되어 통과
시스템에서 발생하는 에러 메세지를 고의로 노출시켜 서버의 구조를 유추하고 추후 해킹에 활용. (에러 메세지 : 개발자가 버그 수정 시 사용하기 때문에 서버의 구조를 알 수 있음. 따라서 배포할 때는 안나타나도록 조치해야 함)
: input값을 받을 때마낟 특수문자가 있는지의 여부를 검사. 로그인 전에 검증로직을 통해 미리 설정한 특수문자들이 들어왔을 때 요청을 막음
sql 서버 오류 메세지를 감추기 위해 view를 활용한 원본 테이블 접근을 막음. 일반 사용자는 view의 권한으로만 접근하여 에러 메세지를 볼 수 없다고 함
Preparsestatement란, 특수문자를 그대로 문자로 받는 형식.(즉, 쿼리문에서 전달인자 값을 ?
로 받는 것) 이 필터링을 통해 공격을 방아함.