TIP게시판

제목 CI 3.0.3 base_url(), site_url() 사용시 IP 주소로 나올때
글쓴이 한대승(불의회상) 작성시각 2015/11/12 13:36:33
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 19381   RSS
한대승(불의회상)
뷰 작업이나 url 관련 작업시 CI의 url 헬퍼는 참 유용합니다.
주로 redirect(), base_url(), site_url() 을 사용 하지요.

그래서 저는 autoload.php 에 등록해 두고 사용 하고 있습니다.

CI가 3.0.3으로 업데이트 되어 깔아 테스트를 하는데 이전 버젼에서는 잘 랜더링 되던 페이지들이 이상하게 보이는 겁니다.
원인을 찾다가 system/core/config.php 에서 원인을 찾았습니다.
public function __construct()
{
	$this->config =& get_config();

	// Set the base_url automatically if none was provided
	if (empty($this->config['base_url']))
	{
		if (isset($_SERVER['SERVER_ADDR'])) // <= 이 부분
		{
			$base_url = (is_https() ? 'https' : 'http').'://'.$_SERVER['SERVER_ADDR'] // <= 이부분
				.substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'], basename($_SERVER['SCRIPT_FILENAME'])));
		}
		else
		{
			$base_url = 'http://localhost/';
		}

		$this->set_item('base_url', $base_url);
	}

	log_message('info', 'Config Class Initialized');
}

3.0.3 이전 버젼까지는 $_SERVER['SERVER_ADDR'] 이 $_SERVER['SERVER_NAME'] 으로 되어 있습니다.

버그인줄 알았는데 매너달팽이님이 chang log에 변경내역이 명시되어 있다하여 확인 해 보니 heder injaction 보안 이슈에 따른 수정이네요.

* 원문
Changed Config Library method base_url() to fallback to $_SERVER['SERVER_ADDR'] when $config['base_url'] is empty in order to avoid Host header injections.

application/config/config.php 의 $config['base_url'] 부분이 비어 있을경우 IP 주소로 바꿔 버리는 거지요.
redirect(), base_url(), site_url() 을 자주 사용하거나 작성한 애플리케이션에서 사용되고 있다면 문제가 됩니다.

application/config/config.php 의 $config['base_url'] 에 사이트의 기본 주소를 명시 하여 주시면 됩니다.
 다음글 CI 3.0.3에서 Captcha 이미지가 생성되지 않... (1)
 이전글 SEO 관련 고민을 하다가 (3)

댓글

매너달팽이 / 2015/11/13 14:36:09 / 추천 0
http://www.codeigniter.com/user_guide/changelog.html 에 명시가 되어있네요.

버전업할때는 항상 문서를 잘 읽어봐야할거 같아요~
한대승(불의회상) / 2015/11/13 16:14:51 / 추천 0
@매너달팽이 그렇군요. changelog를 잘 확인해야 겠네요.
좋은 지적 감사 합니다.