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 回答