CI 묻고 답하기

제목 $this->db->escape() 에 대한 질문입니다.
카테고리 CI 2, 3
글쓴이 엘제이 작성시각 2019/10/31 17:40:30
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 12780   RSS

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

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

 

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

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

 다음글 코드이그나이터를 처음 사용하는데요.. 2.1.4버전을 ... (3)
 이전글 ratchet 구동중에 메세지 전송중 Not enoug... (1)

댓글

배강민 / 2019/10/31 18:03:06 / 추천 0

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

 

kaido / 2019/11/01 09:35:47 / 추천 0

네 맞습니다

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