sql injection 대응 방법 첫 번째
1. prepared statement
select ~~ where id= ?'
질의문이 db에 전달되고 db에 전달되고 db에서 컴파일이 일어난다. db가 기계어로 변환한 다음 이해하고 실행한 다음 사용자가 결과를 받는다.
질의문에 컴파일 해둠. 기계어로 다 바꿔놓는다.
1010000101010101010_________
1010101010101010101010101010
prepared statement 는 원래 처리 속도를 빠르게 하기 위해 나왔다.
근데 sql 인젝션도 막을 수 있었다.
prepared statement를 사용하면 sql 인젝션이 전혀 불가능하다.
그런데 sql 인젝션을 알아야 하는 이유.
1. 잘못 쓴 경우.
select
where id='?'
?를 넣어야 하는데 prepared statement 잘못 사용한 경우
2. prepared statement 못 쓰는 경우.
– order by에는? 사용 불가
– table 이름, column 이름에 사용 불가
where ____ like 사이에도 prepared statement 사용 못함
파라미터에 sort, ord 에 있으면 prepared statement 사용 못 하니 확인해 보자
sql injection 대응 방법 두 번째
2. white list filtering
단어를 기반으로 문자를 제한
화이트 > 특정 단어만 쓸 수 있게 하는 것.
블랙 > 특정 단어를 못 쓰게 하는 것
이런 식으로 화이트리스트 기반으로 필터링하면 막을 수 있다.
if(sort == 'title') {
}elif(sort == 'author')
else{
sort = 'title';
}