1

SQL Injection - 대응방안

SQL Injection - 대응방안

노아의 블로그

    목차
반응형

SQL Injection의 대응 방안은

정말 간단합니다. 

바로 Prepared statement를 사용하면 끝납니다.

이것을 사용하면 SQL Injection 공격을 할 수 없다고 합니다.

 

기존에 사용하던 방법은 select * from meberwhere id = $get['id'] 를 해가지고 입력을 받은경우 SQL을 만드는데, 이것때문에 사용자 입력까지 SQL이 인식되기에 문제죠!

 

그래서 어떤 방향을 가지느냐.미리 이것을 준비해놓는겁니다.입력을 받기전select * from member where id = ?이라는 쿼리를 서버측에서 미리 만들어요.

 

그 다음에 ? 자리에 사용자 입력을 쏙 넣어버립니다. 즉 쿼리의 기본틀을 컴파일해놓고 ?자리에 들어오는 모든 입력은 문자열처리를 하는거죠. 그러므로 할수가 없는 구조입니다.

 

이렇다면 Prepared statement는 이론상 무적인데 왜 계속 데이터 해킹 소식이 들리는것일까요?

 

모종의 이유가 있다고 합니다.

 

1. 낡은 인간,낡은 코드

예전에 Prepared statement가 없었을때 코딩을 하셨던분들이 지금까지 하시면서 사용을 안하시거나

Prepared statement를 사용한다고 해도 예전 습관으로 인해서 ?를 안써버리고 그냥

select * from meber

where id = $get['id'] 똑같이 이렇게 써버린다면 의미가 1도 없습니다. 속 빈 수박인 느낌이죠.

그래서 취약점이 생긴다고 합니다.

 

2.order by절 사용 불가.

 

 사용자 입력을 받아서 정렬해야할때가 있습니다.

이건 되는데 

select * from board
order by $GET['title'] 

 

이건 안됩니다.

select * from board

order by ? 

이러한 경우 Prepared statement를 사용할 수 없다고 합니다.

 

그러므로 취약점이 생깁니다.

반응형

'해킹 > SQL Injection' 카테고리의 다른 글

SQL Injection - Blind SQLi  (0) 2023.04.28
로그인 우회 3번째문제  (0) 2023.04.23
데이터 추출 두번째 문제  (0) 2023.04.23