[Codeigniter-users] URI.pmの_filter_uri()について

Back to archive index

Kenji Suzuki kenji****@gmail*****
2010年 11月 16日 (火) 12:23:26 JST


Kenji です。


On Tue, 9 Nov 2010 15:52:54 +0900
mura <mura****@lives*****> wrote:

> muraと申します。はじめまして。

はじめまして。

 
> CodeIgnitor1.7.2での事象なのですが、/applications/config/config.phpで
> $config['enable_query_strings'] = TRUE;
> としたとき、
> index.php?c=hogehoge
> とコントローラを指定すべきところを
> index.php?c=/../../../../fuga%00
> などとするとパスをトラバーサルできてしまいます。

確認しました。

 
> これは/libraries/URI.phpのなかの_filter_uri()で$config['enable_query_strings'] = TRUEのとき
> permitted_uri_charsで設定したフィルタが効かないことが原因のようなのですが、
> この問題は既に知られているものでしょうか?

ちょっとフォーラムなど調べましたが、なさそうな感じです。

EllisLab に聞いてみます。


> もし、知られているものであれば、回避の方法を教えていただければ幸いです。
> (バージョンアップに伴うドキュメントなどに明記されていることだとしたら、ご容赦下さい)

とりあえず、以前のバージョンのようにフィルタを適用するように変更すれば
防げると思います。

if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)

           ↓

if ($str != '' && $this->config->item('permitted_uri_chars') != '')


> なお、以前のバージョンの_filter_uri()では、enable_query_stringsのTRUE/FALSEに関係なく
> フィルタが有効だったので、先日までこの問題に気づきませんでした。

おっしゃるとおり、1.6.3 では、

	function _filter_uri($str)
	{
		if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
		{
			if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
			{
				exit('The URI you submitted has disallowed characters.');
			}
		}
			
		return $str;
	}

となってますね。


// Kenji




Codeigniter-users メーリングリストの案内
Back to archive index