2013-10-10 12 views
14

を禁止していますCodeIgniterのリダイレクト - 私はこのエラーが発生した、他のウェブサイトにリダイレクトしようとしているときにあなたが提出したURI文字

警告:

A PHPエラーが

重要度を発生しましたメッセージ:でもparse_url(/ 22%* *)function.parse-URL]:URLを解析できません

ファイル名:コア/ URI.php

行番号:219


エラーがあなたが提出したURIが文字を禁止している

を発生しました。


これは私がURI.php

private function _detect_uri() 
{ 
    if (! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME'])) 
    { 
     return ''; 
    } 

    $uri = $_SERVER['REQUEST_URI']; 
    if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0) 
    { 
     $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME'])); 
    } 
    elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0) 
    { 
     $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME']))); 
    } 

    // This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct 
    // URI is found, and also fixes the QUERY_STRING server var and $_GET array. 
    if (strncmp($uri, '?/', 2) === 0) 
    { 
     $uri = substr($uri, 2); 
    } 
    $parts = preg_split('#\?#i', $uri, 2); 
    $uri = $parts[0]; 
    if (isset($parts[1])) 
    { 
     $_SERVER['QUERY_STRING'] = $parts[1]; 
     parse_str($_SERVER['QUERY_STRING'], $_GET); 
    } 
    else 
    { 
     $_SERVER['QUERY_STRING'] = ''; 
     $_GET = array(); 
    } 

    if ($uri == '/' || empty($uri)) 
    { 
     return '/'; 
    } 

    $uri = parse_url($uri, PHP_URL_PATH); 

    // Do some final cleaning of the URI and return it 
    return str_replace(array('//', '../'), '/', trim($uri, '/')); 
} 
+0

正確に何を言っているのですか?CIソースコードでそのエラーメッセージを検索し、それらの文字をチェックする正規表現へのパスに従ってみましたか?私は正規表現が問題を解決するだろうと賭けている... –

答えて

46

CodeIgniterでは、すべてのURIのセグメントをチェックします許可されていない文字。これは、許可された文字を白くリストすることによって起こりますどの変数が許可されているかは、$config['permitted_uri_chars']変数の/system/application/config/config.phpで確認できます。 permitted_uri_charsは、CodeIgniterがあなたのURIで受け入れる文字です。デフォルト値は、次のように設定されています。デフォルトでは

$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-'; 

これらのみが許可されています。a-z 0-9~%.:_-

は、すべての文字を許可する場合は空白のままに - しかし、あなたは非常識である場合にのみ。

%22"になります。permitted_uri_charsに追加できます。

+1

これはメソッドごとに設定できますか?意味、私は電子メールアドレスを送信する人々のために@を許可したいが、クラスの1つの方法でのみ。それぞれのケースでそれを確認することなく、どこにいても許可されないようにしたい。 – KCL

3

で持っているすべてのコードは、これが助けることがnot recommendedで、あなたのapplication/config/config.php変更でも試してみてくださいです:

$config['permitted_uri_chars'] = ''; #keep it blank to allow all characters 
$config['allow_get_array']  = TRUE; 
$config['enable_query_strings'] = TRUE; 
+2

これは本当にオプションではないはずです、そして、私はそれがPHPに新しい誰かのための悪い教育か、またはセキュリティを理解していないと思う。 – Metropolis

+0

いい仕事ですよ、ありがとう –

0

上記の溶液は2番目の行($config['allow_get_array'] = TRUE;);が存在しないこと以外は完璧です。ところで、Open-Blog.infoブログシステムを使用しています。私はこの問題に直面しましたが、Adminのページを開こうとしました。

関連する問題