보안상 쿼리문에 들어가는 변수들에 대해 적용을 하는데요
쿼리바인딩을 사용할 수 없는 상황에서 많이 씁니다. 검색조건등이 있을 때 말입니다.
그런데 해당 쿼리빌더는 지어진 이름대로 역슬래쉬 이스케이핑만 혹은 ' 만 붙이는 역활인지
아니면 SQL인젝션 등에 도움을 주는 지 알고 싶슴니다.
core를 추적해보면, system/database/DB_driver.php에 해당 함수가 간단히 있고,
그 안에 보면 스트링이면 escape_str()를 타는데, 이는
mysql의 경우 system/databas/drivers/mysql/mysql_driver.php안에 있고
코드는 다음과 같습니다. 2.대 기준입니다.
function escape_str($str, $like = FALSE) { if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = $this->escape_str($val, $like); } return $str; } if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id)) { $str = mysql_real_escape_string($str, $this->conn_id); } elseif (function_exists('mysql_escape_string')) { $str = mysql_escape_string($str); } else { $str = addslashes($str); } // escape LIKE condition wildcards if ($like === TRUE) { $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); } return $str; }
네 맞습니다
바인드가 아니라 리터럴형태로 역슬래쉬[정확하게는 밴틱]만 붙여서 조회합니다
core를 추적해보면, system/database/DB_driver.php에 해당 함수가 간단히 있고,
그 안에 보면 스트링이면 escape_str()를 타는데, 이는
mysql의 경우 system/databas/drivers/mysql/mysql_driver.php안에 있고
코드는 다음과 같습니다. 2.대 기준입니다.
function escape_str($str, $like = FALSE) { if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = $this->escape_str($val, $like); } return $str; } if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id)) { $str = mysql_real_escape_string($str, $this->conn_id); } elseif (function_exists('mysql_escape_string')) { $str = mysql_escape_string($str); } else { $str = addslashes($str); } // escape LIKE condition wildcards if ($like === TRUE) { $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); } return $str; }