web-dev-qa-db-ja.com

Codeigniter Redirect-送信したURIで文字が許可されていません

他のWebサイトにリダイレクトしようとすると、次のエラーが表示されます。

PHPエラーが発生しました

重大度:警告

メッセージ:parse_url(/%22 * *)[function.parse-url]:URLを解析できません

ファイル名:core/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, '/'));
}
15
subrui

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

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

デフォルトでは、これらのみが許可されています:a-z 0-9~%.:_-

空白のままにして、すべての文字を許可します。ただし、非常識な場合のみ。

%22"に付属しています。これはpermitted_uri_charsリストに追加できます。

48
Suvash sarker

これを試しても助けになるかもしれませんが、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;
4
Nil'z

上記のソリューションは、2番目の行($config['allow_get_array'] = TRUE;);存在しません。ところで、Open-Blog.infoブログシステムを使用していますが、管理者のページを開くと、この問題に直面しました。

0
Zascos