PHP Codeigniter DB인젝션을 조심하자

2020. 4. 28. 19:59PHP/CodeIgniter

쿼리스트링의 파라미터를 sql문에 사용하는 경우, SQL 인젝션을 예방해야 한다.

 

다음 그림을 SQL 인젝션을 쉽게 설명하고 있다. (출처: xkcd 327화 'Exploits of a Mom')

 

 

 

예를 들어 내가

$member_id = $this->input->get_post('member_id');


$sql = 'select name, city, grade, major from member_list where member_id =' . $member_id;

$this->db->query($sql)->result_array();

머 이런 sql문을 작성했을 때,

나쁜놈이 내 파라미터를 건드려서, 원래대로라면 42라는 숫자였어야 할 값을 'null or 1=1'라는 문자열로 넣어버린다면? 거기에다가 이어서 'union select * from member_private' 이라고 써서 민감한 정보까지 유출시킨다면?

 

아주 새되는거야..

 

그러니까 파라미터 값을 가져다 쓸때는 이러한 위험요소들을 차단하도록 값을 검증하고, 변환하는 과정이 필요하다.

예를 들어, 코드이그나이터의 다음과 같은 함수들을 사용하여 쿼리를 작성하는 방법이 있다.

코드이그나이터의 where()는 내부적으로 두번째 매개변수의 값을 적절하게 처리하도록 설계되어 있다.

$this->db->select('name, city, grade, major');

$this->db->from('member_list');

$this->db->where('member_id', $member_id);

 

아니면 $member_id = intval($member_id); 처럼 처리하든지...

등등..

 

 

위의 내용은 그저 단편적인 예일 뿐이고, SQL 인젝션 공격에는 여러가지 유형이 있다.

자세한 내용은 https://noirstar.tistory.com/264 참고.