3

私は何度も何度も見ましたが、私が望むものに対する答えを見つけることができなかったようですが、ここに行きます:

本当にコンピューターに詳しくないクライアントがいて、発生したエラーが介入なしで処理されるようにしたいと考えています。私が現在行き詰まっているのは、「送信した URI には許可されていない文字が含まれています」ということです。エラー。

すべての文字がエラーを回避できるようにしたくありません。代わりに、このエラーが発生したときに特定の URI にリダイレクトするだけです。例えば:

www.local.com/project/login/'''' ---> www.local.com/project/login

フックで行うことも検討しましたが、チェックを実行したいときにカスタムURLを指定できるようにしたいです。

構成から文字を取得し、現在の URL と URI リダイレクトをパラメーターとして使用して、チェックに合格したかどうかに基づいてリダイレクトするライブラリ メソッドの呼び出しを使用することを考えていました。これはそれを行う方法ですか、それともこれを管理する簡単な方法はありますか?

4

2 に答える 2

1

上記のコメントをすべて読みましたが、これを行う簡単な方法を見逃したと思います。

_filter_uri()関数をオーバーロードするだけで、やりたいことが何でもできます:

(このファイルを application/core/MY_URI.php に配置します)

// Normally this is not fully uppercase - but for some reason the URI filename is
Class MY_URI extends CI_URI
{


/**
 * Filter segments for malicious characters
 *
 * @access  private
 * @param   string
 * @return  string
 */
function _filter_uri($str)
{
    if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
    {
        if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))
        {
            // DO SOMETHING HERE LIKE REDIRECT OR CHANGE THE URL
        }
    }

    // Convert programatic characters to entities
    $bad    = array('$',        '(',        ')',        '%28',      '%29');
    $good   = array('$',    '(',    ')',    '(',    ')');

    return str_replace($bad, $good, $str);
}
于 2012-12-01T09:50:40.373 に答える
0

これは私のプロジェクトで使用しているソリューションです:

ファイル: application/core/MY_URI.php

class MY_URI extends CI_URI {

    /**
     * Filter URI
     *
     * Filters segments for malicious characters.
     *
     * @param   string  $str
     * @return  void
     */
    public function filter_uri(&$str)
    {
        if ( ! empty($str) && ! empty($this->_permitted_uri_chars) && ! preg_match('/^['.$this->_permitted_uri_chars.']+$/i'.(UTF8_ENABLED ? 'u' : ''), $str))
        {
            return preg_replace('~[^a-zA-Z 0-9%.:_\-,()]+~', '', $str);
        }
    }
}
于 2017-02-17T08:56:17.303 に答える