뷰 작업이나 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'] 에 사이트의 기본 주소를 명시 하여 주시면 됩니다.
버전업할때는 항상 문서를 잘 읽어봐야할거 같아요~