질문 Q #21847
$this->db->escape() 에 대한 질문입니다.
엘제이 2019-10-31 17:40:30

보안상 쿼리문에 들어가는 변수들에 대해 적용을 하는데요

쿼리바인딩을 사용할 수 없는 상황에서 많이 씁니다. 검색조건등이 있을 때 말입니다.

 

그런데 해당 쿼리빌더는 지어진 이름대로 역슬래쉬 이스케이핑만 혹은 ' 만 붙이는 역활인지 

아니면 SQL인젝션 등에 도움을 주는 지 알고 싶슴니다.

답변 2
#1 배강민 2019-10-31 18:03:06

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;
	}

 

#2 kaido 2019-11-01 09:35:47

네 맞습니다

바인드가 아니라 리터럴형태로 역슬래쉬[정확하게는 밴틱]만 붙여서 조회합니다